From a0765e669c9ee08e3c4fbd991ac67479dbbb23e2 Mon Sep 17 00:00:00 2001 From: Benjamin Berkels <berkels@aices.rwth-aachen.de> Date: Tue, 19 May 2020 14:28:30 +0200 Subject: [PATCH] Upload New File --- exp-357.ipynb | 197 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 exp-357.ipynb diff --git a/exp-357.ipynb b/exp-357.ipynb new file mode 100644 index 0000000..3c61870 --- /dev/null +++ b/exp-357.ipynb @@ -0,0 +1,197 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### IPython notebook for Example 3.5.7 from the lecture" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from IPython.display import set_matplotlib_formats, display, Math\n", + "\n", + "\n", + "def k(s, t, d):\n", + " return d / np.power(d**2 + (s-t)**2, 3/2)\n", + "\n", + "\n", + "d = 0.1\n", + "n = 80\n", + "h = 1/n\n", + "\n", + "display(Math(r'\\text{Create }A\\text{ from Example 1.7.1, }\\xi_j=\\begin{cases}2&1\\leq j\\leq40\\\\1&41\\leq j\\leq80\\end{cases},\\ y=A\\xi'))\n", + "A = np.zeros((n, n))\n", + "for i in range(n):\n", + " for j in range(n):\n", + " A[i, j] = h * k((i+0.5)*h, (j+0.5)*h, d)\n", + "\n", + "xi = np.ones(n)\n", + "xi[:n//2] = 2\n", + "y = np.matmul(A, xi)\n", + "\n", + "display(Math(r'\\tilde y= y+\\delta y'))\n", + "np.random.seed(0)\n", + "y_tilde = y + 0.02*(np.random.rand(n)-0.5)" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "discrepancy_tilde = np.zeros(100)\n", + "xi_tilde_norm = np.zeros(100)\n", + "discrepancy = np.zeros(100)\n", + "xi_norm = np.zeros(100)\n", + "for i in range(1, 101):\n", + " alpha = 0.005*i\n", + " A_Tikh = np.concatenate((A, alpha*np.eye(n)), axis=0)\n", + " y_tilde_Tikh = np.concatenate((y_tilde, np.zeros(n)), axis=0)\n", + " xi_tilde_alpha = np.linalg.lstsq(A_Tikh, y_tilde_Tikh, rcond=0)[0]\n", + " discrepancy_tilde[i-1] = np.linalg.norm(np.matmul(A, xi_tilde_alpha)-y_tilde)\n", + " xi_tilde_norm[i-1] = np.linalg.norm(xi_tilde_alpha)\n", + " y_Tikh = np.concatenate((y, np.zeros(n)), axis=0)\n", + " xi_alpha = np.linalg.lstsq(A_Tikh, y_Tikh, rcond=0)[0]\n", + " discrepancy[i-1] = np.linalg.norm(np.matmul(A, xi_alpha)-y)\n", + " xi_norm[i-1] = np.linalg.norm(xi_alpha)\n", + "\n", + "set_matplotlib_formats('svg')\n", + "plt.title(\"Tikhonov L-curve\")\n", + "plt.xlabel(r'$||A\\tilde \\xi_{\\alpha}- \\tilde y||_2^2$')\n", + "plt.ylabel(r'$||\\xi_{\\alpha}||_2^2$')\n", + "plt.plot(discrepancy_tilde**2, xi_tilde_norm**2, 'k+')\n", + "plt.show()\n", + "plt.close()" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "plt.title(\"Tikhonov L-curves, zoom\")\n", + "plt.plot(discrepancy_tilde[:50]**2, xi_tilde_norm[:50]**2, 'k+', label=r'$(\\|A \\tilde \\xi_\\alpha - \\tilde y\\|_2^2, \\|\\tilde \\xi_\\alpha\\|_2^2)$')\n", + "plt.plot(discrepancy[:50]**2, xi_norm[:50]**2, 'k.', label=r'$(\\|A \\xi_\\alpha - y\\|_2^2, \\| \\xi_\\alpha\\|_2^2)$')\n", + "plt.legend()\n", + "plt.show()\n", + "plt.close()" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "plt.title(\"Tikhonov L-curves, zoom\")\n", + "plt.plot(discrepancy_tilde[:50], xi_tilde_norm[:50], 'k+', label=r'$(\\|A \\tilde \\xi_\\alpha - \\tilde y\\|_2, \\|\\tilde \\xi_\\alpha\\|_2)$')\n", + "plt.plot(discrepancy[:50], xi_norm[:50], 'k.', label=r'$(\\|A \\xi_\\alpha - y\\|_2, \\| \\xi_\\alpha\\|_2)$')\n", + "plt.legend()\n", + "plt.show()\n", + "plt.close()" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "def CGNE(A, y_tilde):\n", + " xi_tilde = np.zeros(n)\n", + " # xi_tilde is zero, so the initial residuum is the input data.\n", + " r = y_tilde.copy()\n", + " d = np.matmul(A.T, r)\n", + " p = d.copy()\n", + " p_norm = np.linalg.norm(p)\n", + " discrepancy_tilde = np.zeros(201)\n", + " discrepancy_tilde[0] = np.linalg.norm(np.matmul(A, xi_tilde)-y_tilde)\n", + " xi_tilde_norm = np.zeros(201)\n", + " for k in range(1, 201):\n", + " q = np.matmul(A, d)\n", + " beta = (np.linalg.norm(p)/np.linalg.norm(q))**2\n", + " xi_tilde += beta * d\n", + " r += -beta*q\n", + " p = np.matmul(A.T, r)\n", + " p_norm_new = np.linalg.norm(p)\n", + " gamma = (p_norm_new/p_norm)**2\n", + " p_norm = p_norm_new\n", + " d = p + gamma*d\n", + " discrepancy_tilde[k] = np.linalg.norm(np.matmul(A, xi_tilde)-y_tilde)\n", + " xi_tilde_norm[k] = np.linalg.norm(xi_tilde)\n", + " return discrepancy_tilde, xi_tilde_norm\n", + "\n", + "\n", + "discrepancy_tilde, xi_tilde_norm = CGNE(A, y_tilde)\n", + "\n", + "plt.title(\"CGNE L-curve\")\n", + "plt.xlabel(r'$||A\\tilde \\xi_{k}- \\tilde y||_2$')\n", + "plt.ylabel(r'$||\\xi_{k}||_2$')\n", + "plt.plot(discrepancy_tilde[2:], xi_tilde_norm[2:], 'k+')\n", + "plt.show()\n", + "plt.close()\n" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "plt.title(\"CGNE L-curve log-log scale\")\n", + "plt.xlabel(r'$||A\\tilde \\xi_{k}- \\tilde y||_2$')\n", + "plt.ylabel(r'$||\\xi_{k}||_2$')\n", + "plt.loglog(discrepancy_tilde[2:], xi_tilde_norm[2:], 'k+')\n", + "plt.show()\n", + "plt.close()" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "discrepancy, xi_norm = CGNE(A, y)\n", + "\n", + "plt.title(\"CGNE L-curve log-log scale, zoom\")\n", + "plt.loglog(discrepancy_tilde[10:80], xi_tilde_norm[10:80], 'k+', label=r'$(\\|A \\tilde \\xi_\\alpha - \\tilde y\\|_2, \\|\\tilde \\xi_\\alpha\\|_2)$')\n", + "plt.loglog(discrepancy[10:80], xi_norm[10:80], 'k.', label=r'$(\\|A \\xi_\\alpha - y\\|_2, \\| \\xi_\\alpha\\|_2)$')\n", + "plt.legend()\n", + "plt.show()\n", + "plt.close()\n" + ], + "outputs": [], + "execution_count": null + } + ], + "metadata": { + "anaconda-cloud": {}, + "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.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file -- GitLab