{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "In this notebook, we review some properties of complex numbers. In particular, we need complex numbers in view of a complex-valued formulation of the Fourier transform, which significantly simplifies the proof and the understanding of certain algebraic properties of this transform, see Section 2.3.2 of [Müller, FMP, Springer 2015]. \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic Definitions\n", "\n", "We can write a complex number $c = a + ib$ with real part $\\mathrm{Re}(c) = a$, imaginary part $\\mathrm{Im}(c) = b$, and imaginary unit $i = \\sqrt{-1}$. In Python, the symbol `j` is used to denote the imaginary unit. Furthermore, a coefficient before `j` is needed. To specify a complex number, one can also use the constructor `complex`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T09:00:16.170000Z", "iopub.status.busy": "2024-02-15T09:00:16.169802Z", "iopub.status.idle": "2024-02-15T09:00:16.173975Z", "shell.execute_reply": "2024-02-15T09:00:16.173331Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1.5+0.8j)\n", "(1.5+0.8j)\n" ] } ], "source": [ "a = 1.5\n", "b = 0.8\n", "c = a + b*1j\n", "print(c)\n", "c2 = complex(a,b)\n", "print(c2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python offers the built-in `math` package for basic processing of complex numbers. As an alternative, we use here the external package `numpy`, which is used later for various purposes." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T09:00:16.204919Z", "iopub.status.busy": "2024-02-15T09:00:16.204712Z", "iopub.status.idle": "2024-02-15T09:00:17.034289Z", "shell.execute_reply": "2024-02-15T09:00:17.033631Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.5\n", "0.8\n" ] } ], "source": [ "import numpy as np\n", "\n", "print(np.real(c))\n", "print(np.imag(c))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A complex number $c = a+ib$ can be plotted as a point $(a,b)$ in the Cartesian coordinate system. This point is often visualized by an arrow starting at $(0,0)$ and ending at $(a,b)$." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T09:00:17.037130Z", "iopub.status.busy": "2024-02-15T09:00:17.036905Z", "iopub.status.idle": "2024-02-15T09:00:17.575102Z", "shell.execute_reply": "2024-02-15T09:00:17.574524Z" } }, "outputs": [ { "data": { "image/png": "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3bp1Q04lIhJbmuFKQjFr1iwuuOACoPDiuZUrV9K4ceOQU4mIBEPlK4H66KOPOOusswCoVKkSGzZsoFWrVuGGEhEJmMpXArFs2TK6detWvLx69WqOP/74EBOJiIRH5SsxtW7dOtq3b1+8vHDhQk499dQQE4mIhC+QGytI8snNzaVGjRrFxfv+++/j7ipeERFUvhJlX375JS1atKB58+bs3buXN998E3fnnHPOCTuaiEjcUPlKVHz99dd069aNhg0bsmnTJl544QUikQgXXXRR2NFEROKOyld+lL1793LeeedRu3Ztli1bxiOPPEIkEuGXv/ylbnogIvI9VL5yVA4cOMAVV1xBjRo1eO+99xg1ahQFBQXcfvvtKl0RkR+gq52lXPLz87n99tt58sknAbjlllt4/PHHSU3VriQiUlb6iSllEolEuO+++7j//vsBGDx4MC+99BJVq1YNOZmISOJR+coRuTuPP/44t912GwB9+/ZlxowZVK9ePdxgIiIJTOUr3+ull17immuuAeCEE07gww8/pHbt2iGnEhFJfCpf+Y7p06czcOBAAJo0acLSpUtp1KhRyKlERCoOla8Uy8jIoG/fvgBUrVqV7OxsWrRoEXIqEZGKRx81EpYsWcKSJUuKi/fTTz9l//79Kl4RkRhR+SaxTz/9FDPjlFNOAQpL2N3p0KFDyMlERCo2nXZOQhs3bqRt27bk5+cDMG/ePCKRCCeffHLIyUREkoOOfJPI9u3bOeaYY2jVqhX5+fn84x//wN05++yzw44mIpJUVL5J4L///S9dunShcePGbNu2jZdeegl358ILLww7mohIUlL5VmB79uyhT58+1K1bl1WrVvHEE08QiUS46qqrwo4mIpLUVL4V0DfffMOgQYNIT09n3rx53HvvvRQUFDBs2DDd9EBEJA6ofCuQ/Px8br75ZtLS0njjjTcYPnw4Bw8eZPTo0VSqpP/VIiLxQlc7VwCRSITf//73jBkzBoArr7yS559/nipVqoScTEREShPI4ZCZ9TOztWa23szuLmX9lWa2ouhrgZmdGESuROfuPPzww6SkpDBmzBj69evH3r17efnll1W8IiJxLOZHvmaWAowHzgNygUVmNt3dV5fY7DOgt7vvNLP+wCSgR6yzJSp354UXXuCGG24AoHv37sydO5datWqFnExERMoiiNPOpwHr3T0HwMwm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\n", "text/plain": [ "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " |