{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Algorithms of Scientific Computing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The functions $\\cos$ and $\\sin$ are axially respectively point symmetric to the\n", "ascension of 180 degrees. What can be found for the coefficients $a_k$\n", "and $b_k$ from the last worksheet, if the following conditions hold:\n", "\n", "\\begin{eqnarray*}\n", " X_l = X(\\theta_l) &=& X(360-\\theta_l) = X_{12-l} \\qquad \\mbox{respectively}\\\\\n", " X_l = X(\\theta_l) &=& -X(360-\\theta_l) = -X_{12-l}\n", "\\end{eqnarray*}\n", "\n", "Hint: Which values are allowed for $X_0$ and $X_6$ in the case $X_l = -X_{12-l}$?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the last worksheet we showed that the $a_k$ and $b_k$ can be computed by\n", "\$$\n", " c_k = \\frac{1}{12} \\sum\\limits_{l=0}^{11} X_l e^{-i2\\pi kl/12},\n", "\$$\n", "i.e. by a DFT.\n", "\n", "Use the idea of the Fast Fourier Transformation, to reduce this DFT of length 12 to the computation of some DFTs of length 6 or 3, respectively.\n", "\n", "Use the fact that all $X_l \\in \\mathbb{R}$.\n", "\n", "Draw a diagram, that shows the needed computation steps or write an appropriate program (for example in Python)." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import cmath\n", "import math\n", "import matplotlib.pyplot as plt\n", "\n", "def dft3(X):\n", " c0 = np.sum(X)\n", " c1 = np.sum([X[l]*cmath.exp(-2*math.pi*l*1J/3) for l in range(0,3)])\n", " c2 = c1.conjugate()\n", " return [c0, c1, c2]\n", "\n", "def rfft6(X):\n", " c1 = dft3([X[2*l] for l in range(0,3)])\n", " c2 = dft3([X[2*l+1] for l in range(0,3)])\n", " c = [c1[k]+c2[k]*cmath.exp(-math.pi*k*1J/3) for k in range(0,3)] + [c1[0]-c2[0]]\n", " c = c + [c[6-k].conjugate() for k in range(4,6)]\n", " return c\n", "\n", "def rfft12(X):\n", " c1 = rfft6([X[2*l] for l in range(0,6)])\n", " c2 = rfft6([X[2*l+1] for l in range(0,6)])\n", " c = [(c1[k]+c2[k]*cmath.exp(-math.pi*k*1J/6))/12 for k in range(0,6)] + [(c1[0]-c2[0])/12]\n", " #c = c + [c[12-k].conjugate() for k in range(7,12)]\n", " return c\n", "\n", "X = [408, 89, -66, 10, 338, 807, 1238, 1511, 1583, 1462, 1183, 804]\n", "\n", "c = np.array(rfft12(X))\n", "\n", "a = c.real\n", "a[1:6] = np.product([[2],a[1:6]])\n", "b = np.product([[-2],c[1:6].imag])\n", "\n", "#generate interpolation point\n", "def Xint_gen(a,b,t):\n", " return np.sum(np.array([a[k]*math.cos(math.pi*k*t/180) for k in range(0,7)])) + \\\n", " np.sum(np.array([b[k-1]*math.sin(math.pi*k*t/180) for k in range(1,6)]))\n", "\n", "# plotting interpolation results and initial data\n", "resolution = 2\n", "plt.plot(range(0,720,resolution), [Xint_gen(a,b,t) for t in range(0,720,resolution)])\n", "plt.plot(range(0,360,30), X, 'o');\n", "plt.xlabel('ascension')\n", "plt.ylabel('declination')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 3: DFT of Mirrored data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assume a dataset $f_n$, $n=0,\\ldots,N-1$. What is the difference of the\n", "Fourier coefficients for this dataset and the \"mirrored\" dataset $\\widetilde{f}_n = f_n(N-n)$\n", "$\\hat{f}_n := f_{N-n}$ ?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 4: DFT and \"Padding\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A dataset $f_n$, $n = 0, \\dots, N-1$ is extended by ''zeros'', which gives\n", "the dataset $\\hat{f}_n$, $n = 0, \\dots, M-1$, with\n", "\$$\n", " \\hat{f}_n = \n", " \\begin{cases}\n", " f_n \\mbox{if} & n \\le N-1, \\\\\n", " 0 \\mbox{if} & N \\le n \\le M-1\n", " \\end{cases}\n", "\$$\n", "What is the difference between the Fourier coefficients of the original\n", "dataset $f_n$ and the Fourier coefficients of the extended one $\\hat{f}_n$?" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.4" } }, "nbformat": 4, "nbformat_minor": 1 }