{ "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": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAJMmlDQ1BkZWZhdWx0X3JnYi5pY2MAAEiJlZVnUJNZF8fv8zzphUASQodQQ5EqJYCUEFoo0quoQOidUEVsiLgCK4qINEWQRQEXXJUia0UUC4uCAhZ0gywCyrpxFVFBWXDfGZ33HT+8/5l7z2/+c+bec8/5cAEgiINlwct7YlK6wNvJjhkYFMwE3yiMn5bC8fR0A9/VuxEArcR7ut/P+a4IEZFp/OW4uLxy+SmCdACg7GXWzEpPWeGjy0wPj//CZ1dYsFzgMt9Y4eh/eexLzr8s+pLj681dfhUKABwp+hsO/4b/c++KVDiC9NioyGymT3JUelaYIJKZttIJHpfL9BQkR8UmRH5T8P+V/B2lR2anr0RucsomQWx0TDrzfw41MjA0BF9n8cbrS48hRv9/z2dFX73kegDYcwAg+7564ZUAdO4CQPrRV09tua+UfAA67vAzBJn/eqiVDQ0IgALoQAYoAlWgCXSBETADlsAWOAAX4AF8QRDYAPggBiQCAcgCuWAHKABFYB84CKpALWgATaAVnAad4Dy4Aq6D2+AuGAaPgRBMgpdABN6BBQiCsBAZokEykBKkDulARhAbsoYcIDfIGwqCQqFoKAnKgHKhnVARVApVQXVQE/QLdA66At2EBqGH0Dg0A/0NfYQRmATTYQVYA9aH2TAHdoV94fVwNJwK58D58F64Aq6HT8Id8BX4NjwMC+GX8BwCECLCQJQRXYSNcBEPJBiJQgTIVqQQKUfqkVakG+lD7iFCZBb5gMKgaCgmShdliXJG+aH4qFTUVlQxqgp1AtWB6kXdQ42jRKjPaDJaHq2DtkDz0IHoaHQWugBdjm5Et6OvoYfRk+h3GAyGgWFhzDDOmCBMHGYzphhzGNOGuYwZxExg5rBYrAxWB2uF9cCGYdOxBdhK7EnsJewQdhL7HkfEKeGMcI64YFwSLg9XjmvGXcQN4aZwC3hxvDreAu+Bj8BvwpfgG/Dd+Dv4SfwCQYLAIlgRfAlxhB2ECkIr4RphjPCGSCSqEM2JXsRY4nZiBfEU8QZxnPiBRCVpk7ikEFIGaS/pOOky6SHpDZlM1iDbkoPJ6eS95CbyVfJT8nsxmpieGE8sQmybWLVYh9iQ2CsKnqJO4VA2UHIo5ZQzlDuUWXG8uIY4VzxMfKt4tfg58VHxOQmahKGEh0SiRLFEs8RNiWkqlqpBdaBGUPOpx6hXqRM0hKZK49L4tJ20Bto12iQdQ2fRefQ4ehH9Z/oAXSRJlTSW9JfMlqyWvCApZCAMDQaPkcAoYZxmjDA+SilIcaQipfZItUoNSc1Ly0nbSkdKF0q3SQ9Lf5RhyjjIxMvsl+mUeSKLktWW9ZLNkj0ie012Vo4uZynHlyuUOy33SB6W15b3lt8sf0y+X35OQVHBSSFFoVLhqsKsIkPRVjFOsUzxouKMEk3JWilWqUzpktILpiSTw0xgVjB7mSJleWVn5QzlOuUB5QUVloqfSp5Km8oTVYIqWzVKtUy1R1WkpqTmrpar1qL2SB2vzlaPUT+k3qc+r8HSCNDYrdGpMc2SZvFYOawW1pgmWdNGM1WzXvO+FkaLrRWvdVjrrjasbaIdo12tfUcH1jHVidU5rDO4Cr3KfFXSqvpVo7okXY5upm6L7rgeQ89NL0+vU++Vvpp+sP5+/T79zwYmBgkGDQaPDamGLoZ5ht2GfxtpG/GNqo3uryavdly9bXXX6tfGOsaRxkeMH5jQTNxNdpv0mHwyNTMVmLaazpipmYWa1ZiNsulsT3Yx+4Y52tzOfJv5efMPFqYW6RanLf6y1LWMt2y2nF7DWhO5pmHNhJWKVZhVnZXQmmkdan3UWmijbBNmU2/zzFbVNsK20XaKo8WJ45zkvLIzsBPYtdvNcy24W7iX7RF7J/tC+wEHqoOfQ5XDU0cVx2jHFkeRk4nTZqfLzmhnV+f9zqM8BR6f18QTuZi5bHHpdSW5+rhWuT5z03YTuHW7w+4u7gfcx9aqr01a2+kBPHgeBzyeeLI8Uz1/9cJ4eXpVez33NvTO9e7zofls9Gn2eedr51vi+9hP0y/Dr8ef4h/i3+Q/H2AfUBogDNQP3BJ4O0g2KDaoKxgb7B/cGDy3zmHdwXWTISYhBSEj61nrs9ff3CC7IWHDhY2UjWEbz4SiQwNCm0MXwzzC6sPmwnnhNeEiPpd/iP8ywjaiLGIm0iqyNHIqyiqqNGo62ir6QPRMjE1MecxsLDe2KvZ1nHNcbdx8vEf88filhICEtkRcYmjiuSRqUnxSb7JicnbyYIpOSkGKMNUi9WCqSOAqaEyD0tandaXTlz/F/gzNjF0Z45nWmdWZ77P8s85kS2QnZfdv0t60Z9NUjmPOT5tRm/mbe3KVc3fkjm/hbKnbCm0N39qzTXVb/rbJ7U7bT+wg7Ijf8VueQV5p3tudATu78xXyt+dP7HLa1VIgViAoGN1tubv2B9QPsT8M7Fm9p3LP58KIwltFBkXlRYvF/OJbPxr+WPHj0t6ovQMlpiVH9mH2Je0b2W+z/0SpRGlO6cQB9wMdZcyywrK3BzcevFluXF57iHAo45Cwwq2iq1Ktcl/lYlVM1XC1XXVbjXzNnpr5wxGHh47YHmmtVagtqv14NPbogzqnuo56jfryY5hjmceeN/g39P3E/qmpUbaxqPHT8aTjwhPeJ3qbzJqamuWbS1rgloyWmZMhJ+/+bP9zV6tua10bo63oFDiVcerFL6G/jJx2Pd1zhn2m9az62Zp2WnthB9SxqUPUGdMp7ArqGjzncq6n27K7/Ve9X4+fVz5ffUHyQslFwsX8i0uXci7NXU65PHsl+spEz8aex1cDr97v9eoduOZ67cZ1x+tX+zh9l25Y3Th/0+LmuVvsW523TW939Jv0t/9m8lv7gOlAxx2zO113ze92D64ZvDhkM3Tlnv296/d5928Prx0eHPEbeTAaMip8EPFg+mHCw9ePMh8tPN4+hh4rfCL+pPyp/NP637V+bxOaCi+M24/3P/N59niCP/Hyj7Q/Fifzn5Ofl08pTTVNG02fn3Gcufti3YvJlykvF2YL/pT4s+aV5quzf9n+1S8KFE2+Frxe+rv4jcyb42+N3/bMec49fZf4bmG+8L3M+xMf2B/6PgZ8nFrIWsQuVnzS+tT92fXz2FLi0tI/QiyQvpTNDAsAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAfdEVYdFNvZnR3YXJlAEdQTCBHaG9zdHNjcmlwdCA5LjUzLjNvnKwnAAALyklEQVR4nO3dMXMb1QKG4fW91IQfkE2JC7ulsOlSWSVuwtBgzyRp04SOzDCTDrlJGzWZoYlTeKhwR4fcUCpFQmdR0Yk/YApxdT3EJLK82v1293kqSeMwZ3Zz8nJWZ9cbFxcXBQA07T9NDwAAikKQAAixepBGo1GF4wCg51YJ0nQ63d/f/+WXXyofDQC9tUqQyrI8OTmpfCgA9NnVQZrNZtPp9PInk8lkNpvVMiQA+ujqIL169erly5eLtwcHB8fHx4eHh+PxuK6BAdAvVwRpf3//6Oho8fb09LQsy6dPnz579uz58+c1jg2AHrkiSCcnJ/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 }