{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "bbb1a6ac",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b1f0556e",
   "metadata": {},
   "source": [
    "### Wyznacznik macierzy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "f3ddf67e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.0"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = np.array([[2, -1, 3], [0, 1, 1], [1, -1, 2]])\n",
    "np.linalg.det(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "29304216",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = np.array([[1, 3, 2], [2, -1, 4], [-1, 2, -2]])\n",
    "np.linalg.det(A)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "168d5afa",
   "metadata": {},
   "source": [
    "### Macierz transponowana"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "ef31857e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1,  2, -1],\n",
       "       [ 3, -1,  2],\n",
       "       [ 2,  4, -2]])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.transpose(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "091ff847",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.linalg.det(np.transpose(A))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a7eda4d",
   "metadata": {},
   "source": [
    "### Macierz odwrotna"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "33c17224",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 3., -1.],\n",
       "       [-5.,  2.]])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = np.array([[2, 1], [5, 3]])\n",
    "np.linalg.inv(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "6a21bc66",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  1.,  -1.,   1.],\n",
       "       [-38.,  41., -34.],\n",
       "       [ 27., -29.,  24.]])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = np.array([[2, 5, 7], [6, 3, 4], [5, -2, -3]])\n",
    "np.linalg.inv(A)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0ec1ea19",
   "metadata": {},
   "source": [
    "### Zastosowanie wyznacznika do rozwiązywania układu 3 równań liniowych z 3 niewiadomymi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "631c89fd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 2., -1., -1.])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = np.array([[3, 4, 1], [2, -3, 2], [1, -1, 0]])\n",
    "B = np.array([1, 5, 3])\n",
    "np.linalg.solve(A, B)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4364bb47",
   "metadata": {},
   "source": [
    "### Działanie macierzy na wektor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "0981a527",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-2, 13,  9])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = np.array([[2, -1, 1], [4, 2, 5], [2, 1, 0]])\n",
    "B = np.array([2, 5, -1])\n",
    "np.dot(A, B)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "fec9feda",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-2],\n",
       "       [13],\n",
       "       [ 9]])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = np.array([[2, -1, 1], [4, 2, 5], [2, 1, 0]])\n",
    "B = np.array([[2], [5], [-1]])\n",
    "np.dot(A, B)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "65b3007b",
   "metadata": {},
   "source": [
    "### Mnożenie macierzy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "d1b4f8d1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 21, -13,  -9],\n",
       "       [ 52,  22,  49],\n",
       "       [ 14,  -6,  -2]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C = np.array([[3, 0, 8], [7, 1, -5], [2, 0, 4]])\n",
    "D = np.array([[7, 1, 5], [3, 5, -1], [0, -2, -3]])\n",
    "np.dot(C, D)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "c8ecd580",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 21, -13,  -9],\n",
       "       [ 52,  22,  49],\n",
       "       [ 14,  -6,  -2]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.matmul(C, D)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "abd5b934",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-292],\n",
       "       [ 623],\n",
       "       [-124]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.linalg.multi_dot([C, D, A, B])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "b2947f4d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AxB = \n",
      " [[  3 -11 -12]\n",
      " [  7  -1  12]\n",
      " [ -7  -1  -4]]\n",
      "BxA = \n",
      " [[ -1  -1 -12]\n",
      " [  3   9   2]\n",
      " [  6  -4 -10]]\n"
     ]
    }
   ],
   "source": [
    "A = np.array([[3, 2, -1], [0, 1, 5], [1, -2, -3]])\n",
    "B = np.array([[0, -3, -1], [2, -1, -3], [1, 0, 3]])\n",
    "print('AxB = \\n', np.dot(A, B))\n",
    "print('BxA = \\n', np.dot(B, A))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1b7634a3",
   "metadata": {},
   "source": [
    "### Wartości i wektory własne"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "7b05abf3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([1., 3.]),\n",
       " array([[1.        , 0.92847669],\n",
       "        [0.        , 0.37139068]]))"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = np.array([[1, 5], [0, 3]])\n",
    "np.linalg.eig(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "3ad28718",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([-1.,  1.,  2.]),\n",
       " array([[ 0.        ,  0.70710678,  0.66666667],\n",
       "        [ 0.        ,  0.        ,  0.33333333],\n",
       "        [ 1.        , -0.70710678, -0.66666667]]))"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = np.array([[1, 2, 0], [0, 2, 0], [-2, -2, -1]])\n",
    "np.linalg.eig(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "329bb856",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/latex": [
       "$\\displaystyle \\left[ \\left( -1, \\  1, \\  \\left[ \\left[\\begin{matrix}0\\\\0\\\\1\\end{matrix}\\right]\\right]\\right), \\  \\left( 1, \\  1, \\  \\left[ \\left[\\begin{matrix}-1\\\\0\\\\1\\end{matrix}\\right]\\right]\\right), \\  \\left( 2, \\  1, \\  \\left[ \\left[\\begin{matrix}-1\\\\- \\frac{1}{2}\\\\1\\end{matrix}\\right]\\right]\\right)\\right]$"
      ],
      "text/plain": [
       "⎡⎛       ⎡⎡0⎤⎤⎞  ⎛      ⎡⎡-1⎤⎤⎞  ⎛      ⎡⎡ -1 ⎤⎤⎞⎤\n",
       "⎢⎜       ⎢⎢ ⎥⎥⎟  ⎜      ⎢⎢  ⎥⎥⎟  ⎜      ⎢⎢    ⎥⎥⎟⎥\n",
       "⎢⎜-1, 1, ⎢⎢0⎥⎥⎟, ⎜1, 1, ⎢⎢0 ⎥⎥⎟, ⎜2, 1, ⎢⎢-1/2⎥⎥⎟⎥\n",
       "⎢⎜       ⎢⎢ ⎥⎥⎟  ⎜      ⎢⎢  ⎥⎥⎟  ⎜      ⎢⎢    ⎥⎥⎟⎥\n",
       "⎣⎝       ⎣⎣1⎦⎦⎠  ⎝      ⎣⎣1 ⎦⎦⎠  ⎝      ⎣⎣ 1  ⎦⎦⎠⎦"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sympy as sp\n",
    "sp.init_printing(use_unicode=True)\n",
    "\n",
    "A = sp.Matrix([[1, 2, 0], [0, 2, 0], [-2, -2, -1]])\n",
    "A.eigenvects()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "ede40a5b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 4.,  1., -2.]),\n",
       " array([[-0.66666667, -0.66666667,  0.33333333],\n",
       "        [ 0.66666667, -0.33333333,  0.66666667],\n",
       "        [-0.33333333,  0.66666667,  0.66666667]]))"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = np.array([[2, -2, 0], [-2, 1, -2], [0, -2, 0]])\n",
    "np.linalg.eig(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "c601c4dc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/latex": [
       "$\\displaystyle \\left[ \\left( -2, \\  1, \\  \\left[ \\left[\\begin{matrix}\\frac{1}{2}\\\\1\\\\1\\end{matrix}\\right]\\right]\\right), \\  \\left( 1, \\  1, \\  \\left[ \\left[\\begin{matrix}-1\\\\- \\frac{1}{2}\\\\1\\end{matrix}\\right]\\right]\\right), \\  \\left( 4, \\  1, \\  \\left[ \\left[\\begin{matrix}2\\\\-2\\\\1\\end{matrix}\\right]\\right]\\right)\\right]$"
      ],
      "text/plain": [
       "⎡⎛       ⎡⎡1/2⎤⎤⎞  ⎛      ⎡⎡ -1 ⎤⎤⎞  ⎛      ⎡⎡2 ⎤⎤⎞⎤\n",
       "⎢⎜       ⎢⎢   ⎥⎥⎟  ⎜      ⎢⎢    ⎥⎥⎟  ⎜      ⎢⎢  ⎥⎥⎟⎥\n",
       "⎢⎜-2, 1, ⎢⎢ 1 ⎥⎥⎟, ⎜1, 1, ⎢⎢-1/2⎥⎥⎟, ⎜4, 1, ⎢⎢-2⎥⎥⎟⎥\n",
       "⎢⎜       ⎢⎢   ⎥⎥⎟  ⎜      ⎢⎢    ⎥⎥⎟  ⎜      ⎢⎢  ⎥⎥⎟⎥\n",
       "⎣⎝       ⎣⎣ 1 ⎦⎦⎠  ⎝      ⎣⎣ 1  ⎦⎦⎠  ⎝      ⎣⎣1 ⎦⎦⎠⎦"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = sp.Matrix([[2, -2, 0], [-2, 1, -2], [0, -2, 0]])\n",
    "A.eigenvects()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "218a2257",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/latex": [
       "$\\displaystyle \\left[ \\left( \\frac{a}{2} + \\frac{d}{2} - \\frac{\\sqrt{a^{2} - 2 a d + 4 b c + d^{2}}}{2}, \\  1, \\  \\left[ \\left[\\begin{matrix}- \\frac{d}{c} + \\frac{\\frac{a}{2} + \\frac{d}{2} - \\frac{\\sqrt{a^{2} - 2 a d + 4 b c + d^{2}}}{2}}{c}\\\\1\\end{matrix}\\right]\\right]\\right), \\  \\left( \\frac{a}{2} + \\frac{d}{2} + \\frac{\\sqrt{a^{2} - 2 a d + 4 b c + d^{2}}}{2}, \\  1, \\  \\left[ \\left[\\begin{matrix}- \\frac{d}{c} + \\frac{\\frac{a}{2} + \\frac{d}{2} + \\frac{\\sqrt{a^{2} - 2 a d + 4 b c + d^{2}}}{2}}{c}\\\\1\\end{matrix}\\right]\\right]\\right)\\right]$"
      ],
      "text/plain": [
       "⎡⎛                                         ⎡⎡                 _________________________⎤⎤⎞  ⎛                          ↪\n",
       "⎢⎜           _________________________     ⎢⎢                ╱  2                    2 ⎥⎥⎟  ⎜           ______________ ↪\n",
       "⎢⎜          ╱  2                    2      ⎢⎢      a   d   ╲╱  a  - 2⋅a⋅d + 4⋅b⋅c + d  ⎥⎥⎟  ⎜          ╱  2            ↪\n",
       "⎢⎜a   d   ╲╱  a  - 2⋅a⋅d + 4⋅b⋅c + d       ⎢⎢      ─ + ─ - ────────────────────────────⎥⎥⎟  ⎜a   d   ╲╱  a  - 2⋅a⋅d +  ↪\n",
       "⎢⎜─ + ─ - ────────────────────────────, 1, ⎢⎢  d   2   2                2              ⎥⎥⎟, ⎜─ + ─ + ───────────────── ↪\n",
       "⎢⎜2   2                2                   ⎢⎢- ─ + ────────────────────────────────────⎥⎥⎟  ⎜2   2                2    ↪\n",
       "⎢⎜                                         ⎢⎢  c                    c                  ⎥⎥⎟  ⎜                          ↪\n",
       "⎢⎜                                         ⎢⎢                                          ⎥⎥⎟  ⎜                          ↪\n",
       "⎣⎝                                         ⎣⎣                    1                     ⎦⎦⎠  ⎝                          ↪\n",
       "\n",
       "↪                 ⎡⎡                 _________________________⎤⎤⎞⎤\n",
       "↪ ___________     ⎢⎢                ╱  2                    2 ⎥⎥⎟⎥\n",
       "↪          2      ⎢⎢      a   d   ╲╱  a  - 2⋅a⋅d + 4⋅b⋅c + d  ⎥⎥⎟⎥\n",
       "↪ 4⋅b⋅c + d       ⎢⎢      ─ + ─ + ────────────────────────────⎥⎥⎟⎥\n",
       "↪ ───────────, 1, ⎢⎢  d   2   2                2              ⎥⎥⎟⎥\n",
       "↪                 ⎢⎢- ─ + ────────────────────────────────────⎥⎥⎟⎥\n",
       "↪                 ⎢⎢  c                    c                  ⎥⎥⎟⎥\n",
       "↪                 ⎢⎢                                          ⎥⎥⎟⎥\n",
       "↪                 ⎣⎣                    1                     ⎦⎦⎠⎦"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a=sp.Symbol('a')\n",
    "b=sp.Symbol('b')\n",
    "c=sp.Symbol('c')\n",
    "d=sp.Symbol('d')\n",
    "# albo\n",
    "a, b, c, d = sp.symbols('a b c d')\n",
    "# albo\n",
    "a, b, c, d = sp.symbols('a, b, c, d')\n",
    "\n",
    "A = sp.Matrix([[a,b], [c,d]])\n",
    "A.eigenvects()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "065750c5-0b06-4e3d-b331-04f3bf0d16aa",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
