{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Part 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Premessa\n",
    "Si devono realizzare algoritmi che riducano al minimo gli errori che si commettono sia nella fase di memorizzazione dei numeri che quando si eseguono operazioni tra loro. È molto importante saper interpretare i risultati che fornisce un algoritmo."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 1\n",
    "\n",
    "Confrontare  i  risultati  delle  operazioni $(0.3-0.2)-0.1$ e $0.3-(0.2 + 0.1)$ e fornire una spiegazione a quanto osservato.  Ripetere l’esercizio con le operazioni $0.1\\ast (0.2 + 0.5)$ e $0.1\\ast 0.2 + 0.1\\ast 0.5$.\n",
    "\n",
    "Ad esempio per la rappresentazione del numero  si ha prima la rappresentazione tramite arrotondamento, si ottiene  in cui si aggiunge alla 54-esima cifra (mantissa di 53 cifre nella rappresentazione di MATLAB) la base mezza (1 in questo caso visto che MATLAB memorizza in base 2). Il numero che si ottiene va normalizzato dato che la prima cifra di mantissa non è 1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ris1 =   -2.775557561562891e-17\n",
      "ris2 =   -5.551115123125783e-17\n"
     ]
    }
   ],
   "source": [
    "format long\n",
    "# dati iniziali\n",
    "a = 0.1;\n",
    "b = 0.2;\n",
    "c = 0.3;\n",
    "\n",
    "# svolgimento delle operazioni\n",
    "ris1 = (c - b) - a\n",
    "ris2 = c - (b + a)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nel secondo caso si ottiene un numero diverso, più piccolo del primo. Si ha un'approssimazione di questo tipo perché si svolgono operazioni di somma algebrica tra numeri molto vicini e si verifica il fenomeno della cancellazione numerica.\n",
    "\n",
    "Si ha che non vale la proprietà associativa tra numeri finiti, infatti assemblando i calcoli in modo differente si ottengono risultati diversi. Questa diversità dei risultati è dovuta ad approssimazioni di tipo differente (arrotondamento per eccesso o per difetto)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Calcolo dell'indice algoritmico"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "I_alg_1 =  1.5000\n",
      "I_alg_2 =  1.8333\n"
     ]
    }
   ],
   "source": [
    "format short\n",
    "I_alg_1 = abs(a + b)/abs(a + b + c) + 1 % (a + b) + c\n",
    "I_alg_2 = abs(b + c)/abs(a + b + c) + 1 % a + (b + c)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "L'operazione $(a + b) + c$ è più stabile di $a + (b + c)$ per la particolare scelta dei valori di $a$,$b$ e $c$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 2\n",
    "Siano $a = 1.234567890123400e+15$, $b=−1.234567890123401e+15$, $c= 0.06$. Calcolare $(a+b)+c$, $(a+c)+b$, $a+(b+c)$.  \n",
    "Che cosa si osserva?  Ripetere l’esercizio con $a = 0.23371258e-4$, $b = 0.33678429e+ 2$, $c = -0.33677911e+ 2$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# dati iniziali\n",
    "a = 1.234567890123400e+15;\n",
    "b = -1.234567890123401e+15;\n",
    "c = 0.06;\n",
    "\n",
    "d = 0.23371258e-4;\n",
    "e = 0.33678429e+2;\n",
    "f = 0.33677911e+2;"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nel primo caso si osservano i fenomeni della **cancellazione** e dell'**assorbimento**. Il primo si verifica quando si sottraggono numeri molto vicini tra loro. Il secondo quando sono coinvolti nell'operazione numeri con ordine di grandezza molto diversi."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ans = -1\n",
      "ris3 = -0.94000\n",
      "ans =  1234567890123400\n",
      "ris4 = -1\n",
      "ans = -1234567890123401\n",
      "ris5 = -1\n",
      "ans =  33.678\n",
      "ris6 =  67.356\n",
      "ans =  33.678\n",
      "ris7 =  67.356\n",
      "ans =  67.356\n",
      "ris8 =  67.356\n"
     ]
    }
   ],
   "source": [
    "# svolgimento delle operazioni\n",
    "a + b\n",
    "ris3 = (a + b) + c\n",
    "a + c\n",
    "ris4 = (a + c) + b\n",
    "b + c\n",
    "ris5 = a + (b + c)\n",
    "d + e\n",
    "ris6 = (d + e) + f\n",
    "d + f\n",
    "ris7 = (d + f) + e\n",
    "f + e\n",
    "ris8 = d + (f + e)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 3\n",
    "Nell’aritmetica di matlab sommare per $i = 1,...10$ gli addendi $w_i$ con $w_i = 0.1e-15$ e , per $i = 2,...,10$.  \n",
    "Come è meglio procedere?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# dati iniziali\n",
    "w = 0.1e-15;"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "L'ordine con cui si sommano i numeri influisce sul risultato finale. La seconda approssimazione è in generale migliore, infatti conviene sommare i numeri in ordine crescente. \n",
    "\n",
    "Si dimostra in particolare che l'indice algoritmico per l'algoritmo di somma di $n$ numeri macchina è pari a: $I_{ALG} = n - 1$. Perciò l'algoritmo risulta stabile. Queste considerazioni valgono nel caso in cui si sommano algebricamente numeri di segno concorde."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "s1 =  1\n",
      "s2 =  1.0000\n"
     ]
    }
   ],
   "source": [
    "# svolgimento delle operazioni\n",
    "s1 = sum([1 ones(1,9)*w])\n",
    "s2 = sum([ones(1,9)*w 1]) % somma in ordine crescente"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 4\n",
    "Si considerino le espressioni $y_1 = \\sqrt{x^2 +1}-x$ e $y_2 = \\frac{1}{\\sqrt{x^2+1}+x}$.\n",
    "Calcolare il valore di $y_1$ e $y_2$ per $x = 7777$ e $x = 77777777$.  \n",
    "Che cosa si osserva?  Commentare i risultati ottenuti."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# dati iniziali\n",
    "x1 = 7777;\n",
    "x2 = 77777777;"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In questo caso si verifica il fenomeno di cancellazione. Si nota a partire dall'ottava cifra decimale."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y1 =    6.429214317904552e-05\n",
      "y2 =    6.429214323431402e-05\n"
     ]
    }
   ],
   "source": [
    "# svolgimento operazioni\n",
    "format long\n",
    "y1 = sqrt( x1^2 + 1 ) - x1\n",
    "y2 = 1 / (sqrt( x1^2 + 1 ) + x1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Si ha la somma di numeri con ordini di grandezza differenti con conseguente cancellazione di cifre significative.\n",
    "La migliore approssimazione è la seconda perché elimina l'operazione di differenza."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y3 = 0\n",
      "y4 =    6.428571492857143e-09\n"
     ]
    }
   ],
   "source": [
    "y3 = sqrt( x2^2 + 1 ) - x2 # sqrt(x2^2+1) ~ x2, quindi si sottraggono quantità molto vicine\n",
    "y4 = 1 / (sqrt( x2^2 + 1 ) + x2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 5\n",
    "\n",
    "Valutare teoricamente l’errore relativo che si commette calcolando in aritmetica floating point l’espressione:\n",
    "\n",
    "\n",
    "$$ A(x) = \\frac{1}{x} - \\frac{1}{(x+1)} $$\n",
    "\n",
    "rispetto al valore esatto, assumendo che $x$ e $x+1$ non siano affetti da errore di rappresentazione.  \n",
    "Verificare poi in ambiente Matlab il risultato ottenuto, considerando come valori di $x$ il vettore $[10^0,10^1, ...,10^{20}]$ contenente successive potenze di 10, e usando un gafico in scala logaritmica su $x$ e $y$ per confrontare l’errore relativo ottenuto con quello previsto dalla teoria.\n",
    "\n",
    "\n",
    "Si consideri come valore esatto quello calcolato in Matlab con l’espressione algebricamente equivalente:\n",
    "\n",
    "\n",
    "$$ B(x) = \\frac{1}{x(x+1)} $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Risoluzione teorica\n",
    "$Hp\\ x,x+1 \\in F$\n",
    "\n",
    "$fl(A(x)) = (1x(1+\\varepsilon r)-1/(x+1)$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "warning: axis: omitting non-positive data in log plot\n",
      "warning: called from\n",
      "    __plt__>__plt2vv__ at line 495 column 10\n",
      "    __plt__>__plt2__ at line 242 column 14\n",
      "    __plt__ at line 107 column 18\n",
      "    loglog at line 60 column 10\n",
      "warning: axis: omitting non-positive data in log plot\n",
      "warning: called from\n",
      "    __plt__>__plt2vv__ at line 495 column 10\n",
      "    __plt__>__plt2__ at line 242 column 14\n",
      "    __plt__ at line 107 column 18\n",
      "    loglog at line 60 column 10\n",
      "warning: axis: omitting non-positive data in log plot\n",
      "warning: called from\n",
      "    __plt__>__plt2vv__ at line 495 column 10\n",
      "    __plt__>__plt2__ at line 242 column 14\n",
      "    __plt__ at line 107 column 18\n",
      "    loglog at line 60 column 10\n",
      "warning: axis: omitting non-positive data in log plot\n",
      "warning: called from\n",
      "    text at line 170 column 10\n",
      "    legend at line 1013 column 17\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# dati iniziali\n",
    "format long e\n",
    "col = [\"r\",\"b:\"];\n",
    "\n",
    "## preallocazione\n",
    "vetX = ones([1,20]);\n",
    "vetY = ones([1,20]);\n",
    "vetZ = ones([1,20]);\n",
    "\n",
    "# svolgimento delle operazioni\n",
    "for i=1:20\n",
    "    vetX(i) = 10^i;\n",
    "\n",
    "    vetY(i) = 1 / vetX(i) - 1 / ( vetX(i) + 1 );\n",
    "    vetZ(i) = 1 / ( vetX(i) * ( vetX(i) + 1 ) );\n",
    "end\n",
    "\n",
    "loglog(vetX,vetY, 'bo-', vetX,vetZ, 'r--');\n",
    "legend(\"Approx value\", \"Exact value\");\n",
    "box off\n",
    "warning (\"off\", \"Octave:negative-data-log-axis\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Con uno zoom è possibile notare che i valori divergono, in particolare il valore approssimato tende a essere minore del valore esatto."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 6\n",
    "\n",
    "Quali problemi si possono incontrare nel calcolo delle radici di $ax^2 + bx+ c$?\n",
    "\n",
    "Provare a risolvere l’equazione $x^2 + 10kx + 1 = 0$ con `k = 1 : 1 : 8`. \n",
    "\n",
    "Che cosa si osserva?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x1 =\n",
      "\n",
      " Columns 1 through 3:\n",
      "\n",
      "  -1.010205144336442e-01  -1.000100020004879e-02  -1.000001000022621e-03\n",
      "\n",
      " Columns 4 through 6:\n",
      "\n",
      "  -1.000000011117663e-04  -1.000000338535756e-05  -1.000007614493370e-06\n",
      "\n",
      " Columns 7 and 8:\n",
      "\n",
      "  -9.965151548385620e-08  -7.450580596923828e-09\n",
      "\n",
      "x2 =\n",
      "\n",
      " Columns 1 through 3:\n",
      "\n",
      "  -9.898979485566356e+00  -9.998999899979995e+01  -9.999989999990000e+02\n",
      "\n",
      " Columns 4 through 6:\n",
      "\n",
      "  -9.999999899999999e+03  -9.999999999000000e+04  -9.999999999990000e+05\n",
      "\n",
      " Columns 7 and 8:\n",
      "\n",
      "  -9.999999999999899e+06  -1.000000000000000e+08\n",
      "\n"
     ]
    }
   ],
   "source": [
    "format long\n",
    "clear a b c x1 x2\n",
    "a = 1;\n",
    "c = 1;\n",
    "x1 = ones([1,8]);\n",
    "x2 = ones([1,8]);\n",
    "\n",
    "for k = 1:8\n",
    "    b = 10^k;\n",
    "    x1(k) = (-b + sqrt(b^2 - 4 * a * c)) / (2 * a);\n",
    "    x2(k) = (-b - sqrt(b^2 - 4 * a * c)) / (2 * a);\n",
    "end\n",
    "\n",
    "x1\n",
    "x2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Scrivere uno script Matlab che fornisca le approssimazioni di  ottenute con la formula:\n",
    "\n",
    "$$ f(n) = \\left( \\frac{1}{n} + 1 \\right) n $$\n",
    "\n",
    "per $n = 10k$ e $k = 0,...,16$.\n",
    "\n",
    "Cosa si osserva? Commentare i risultati ottenuti."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "fn =\n",
      "\n",
      " Columns 1 through 4:\n",
      "\n",
      "   2.000000000000000   2.593742460100002   2.704813829421528   2.716923932235594\n",
      "\n",
      " Columns 5 through 8:\n",
      "\n",
      "   2.718145926824926   2.718268237192297   2.718280469095753   2.718281694132082\n",
      "\n",
      " Columns 9 through 12:\n",
      "\n",
      "   2.718281798347358   2.718282052011560   2.718282053234788   2.718282053357110\n",
      "\n",
      " Columns 13 through 16:\n",
      "\n",
      "   2.718523496037238   2.716110034086901   2.716110034087023   3.035035206549262\n",
      "\n",
      " Column 17:\n",
      "\n",
      "   1.000000000000000\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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HrkiSCcnJ/fv31+8nUwm29vbRVGUZXl2drb4/MWLF+sfHgB9sdSmhrIs5y92dnY++MObm5sbl9xodAD0xkfL/NBig8PlFdJ7eBwRANf14RXS9vb2+fl5URTT6XRra2v9QwKgjz68QhoMBqPRaDgcnp2dPXjwoIYxAdBDG0teXhuPx2VZLr5Meo/Nzc03b97ceGAA9MtS3yEVRbG7u7vWcQDQc572DUAEQQIggiABEEGQAIggSABEECQAIggSABEECYAIggRABEECIIIgARBBkACIIEgARBAkACIIEgARBAmACIIEQARBAiCCIAEQQZAAiCBIAEQQJAAiCBIAEQQJgAiCBEAEQQIggiABEEGQAIggSABEECQAIggSABEECYAIggRABEECIIIgARBBkACIIEgARBAkACIIEgARBAmACIIEQARBAiCCIAEQQZAAiCBIAEQQJAAiCBIAEQQJgAiCBEAEQQIggiABEEGQAIggSABEECQAIggSABEECYAIggRABEECIIIgARBBkACIIEgARBAkACIIEgARBAmACIIEQARBAiCCIAEQQZAAiCBIAEQQJAAiCBIAEQQJgAiCBEAEQQIggiABEEGQAIggSABEECQAIggSABEECYAIggRABEECIIIgARBBkACIIEgARBAkACIIEgARBAmACIIEQARBAiCCIAEQQZAAiCBIAEQQJAAiCBIAEQQJgAiCBEAEQQIggiABEEGQAIggSABEECQAIggSABEECYAIggRABEECIIIgARBBkACIIEgARBAkACIIEgARBAmACIIEQARBAiCCIAEQQZAAiCBIAEQQJAAiCBIAEQQJgAiCBEAEQQIggiABEEGQAIggSABEECQAIggSABEECYAIggRABEECIIIgARBBkACIIEgARBAkACIIEgARBAmACIIEQARBAiCCIAEQQZAAiCBIAEQQJAAiCBIAEQQJgAiCBEAEQQIggiABEEGQAIggSABEECQAIggSABEECYAIggRABEECIIIgARBBkACIIEgARBAkACIIEgARBAmACIIEQARBAiCCIAEQQZAAiCBIAEQQJAAiCBIAEQQJgAiCBEAEQQIggiABEEGQAIggSABEECQAIggSABEECYAIggRABEECIIIgARBBkACIIEgARBAkACIIEgARBAmACIIEQARBAiCCIAEQQZAAiCBIAEQQJAAi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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# dati iniziali\n",
    "e = exp(1);\n",
    "fn = ones([1,17]);\n",
    "\n",
    "# svolgimento delle operazioni\n",
    "for k=1:17\n",
    "    n = 10^(k-1);\n",
    "    fn(k) = (1/n + 1)^n;\n",
    "end\n",
    "\n",
    "fn\n",
    "semilogy(fn)\n",
    "box off"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Octave",
   "language": "octave",
   "name": "octave"
  },
  "language_info": {
   "file_extension": ".m",
   "help_links": [
    {
     "text": "GNU Octave",
     "url": "https://www.gnu.org/software/octave/support.html"
    },
    {
     "text": "Octave Kernel",
     "url": "https://github.com/Calysto/octave_kernel"
    },
    {
     "text": "MetaKernel Magics",
     "url": "https://metakernel.readthedocs.io/en/latest/source/README.html"
    }
   ],
   "mimetype": "text/x-octave",
   "name": "octave",
   "version": "5.2.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}