{ "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "remove_cell" ] }, "source": [ "
\n", "
\n", "

Ingenieurinformatik – Übung

\n", " Lehrstuhl Computational Civil Engineering
\n", " Kontakt: Email senden | Individuelle Kontakte siehe Webseite des Lehrstuhls
\n", " Links: \n", " Vorlesungsskript | \n", " Webseite des Lehrstuhls\n", "
\n", "
\n", " \n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Funktion für π-Näherungsformel " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In dieser Aufgabe wird eine Näherungsformel für die Zahl π in einer Funktionen selbst definiert und eingesetzt." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aufgabenteil A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Schreiben Sie eine Funktion, welche die folgende Näherungsformel für die Zahl π bis zum $\\sf N$-ten Summanden auswertet.\n", "$ \\sf \\frac{\\pi}{4} \\approx \\sum_{k=0}^N \\frac{(-1)^k}{2k+1} \\quad \\quad \\text{mit}\\quad N\\gg 1$\n", "\n", "Die Funktion soll $\\sf N$ als einziges Argument aufnehmen und den Näherungswert zurückgeben." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Lösungshinweis\n", "\n", "Die Richtigkeit ihrer Implementierung können Sie durch manuelle Auswertung der Näherungsformel für kleine $\\sf N$ stichprobenartig prüfen." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# so könnte der Funktionskörper aussehen\n", "def naeherung_pi(N):\n", " # Ihre Berechnung\n", " pi = 3 # nur als Platzhalter\n", " return pi" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "loesung", "hide-cell" ] }, "source": [ "### Lösungsvorschlag" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "loesung", "hide-cell" ] }, "outputs": [], "source": [ "# Funktion zur näherungsweisen Berechnung von π\n", "def naeherung_pi(N):\n", " p = 0\n", " for i in range(N+1):\n", " p += (-1)**i / (2*i+1)\n", " return p*4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aufgabenteil B" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Schreiben Sie ein Skript, welches die obige Funktion für verschiedene Werte von $\\sf N$ aufruft und die Differenz zum angenährten Wert (3.141592653589793238) von π ausgibt. \n", "* Darüber hinaus soll auch der Faktor, um welchen sich die Differenz zwischen den gewählten $\\sf N$ verringert, ausgegeben werden. Speichern Sie dazu am besten die berechneten Näherungswerte in eine Liste und führen erst danach die Auswertung bzw. Ausgabe durch.\n", "* Betrachten Sie einen Wertebereich von $\\sf N$ zwischen 1 und 100." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Lösungshinweis" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "pi_genau = 3.141592653589793238" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So könnte beispielsweise ein Teil der Ausgabe aussehen." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "def my_pi(N):\n", " p = 0\n", " for i in range(N+1):\n", " p += (-1)**i / (2*i+1)\n", " return p*4\n", " " ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "pis = []\n", "Ns = []\n", "ds = []\n", "for N in range(10,20):\n", " Ns.append(N)\n", " pis.append(my_pi(N))\n", " ds.append(abs(my_pi(N) - 3.141592653589793238))" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "tags": [ "remove_input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "N\t ~π\t\t\t ∆π\t\t\t Reduktionsfaktor\n", "===========================================================================\n", "10 \t 3.232315809405594 \t 0.09072315581580082 \t None\n", "11 \t 3.058402765927333 \t 0.08318988766245994 \t 1.0905550946757718\n", "12 \t 3.2184027659273333 \t 0.0768101123375402 \t 1.0830590547359698\n", "13 \t 3.0702546177791854 \t 0.07133803581060771 \t 1.0767062965044352\n", "14 \t 3.208185652261944 \t 0.06659299867215074 \t 1.0712542944914922\n", "15 \t 3.079153394197428 \t 0.062439259392365276 \t 1.0665244802742384\n", "16 \t 3.200365515409549 \t 0.05877286181975583 \t 1.0623824918353224\n", "17 \t 3.0860798011238346 \t 0.055512852465958495 \t 1.0587253079058843\n", "18 \t 3.1941879092319425 \t 0.0525952556421494 \t 1.0554726236841592\n", "19 \t 3.09162380666784 \t 0.04996884692195325 \t 1.0525609230947106\n" ] } ], "source": [ "print(\"N\\t ~π\\t\\t\\t ∆π\\t\\t\\t Reduktionsfaktor\")\n", "print(\"=\"*75)\n", "for i in range(len(Ns)):\n", " f = None\n", " if i != 0:\n", " f = abs(ds[i-1]/ds[i])\n", " print(Ns[i], '\\t', pis[i], '\\t', ds[i], '\\t', f)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "loesung", "hide-cell" ] }, "source": [ "### Lösungsvorschlag" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "tags": [ "loesung", "hide-cell" ] }, "outputs": [], "source": [ "# Funktion zur näherungsweisen Berechnung von π\n", "def my_pi(N):\n", " p = 0\n", " for i in range(N+1):\n", " p += (-1)**i / (2*i+1)\n", " return p*4\n", " " ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "tags": [ "loesung", "hide-cell" ] }, "outputs": [], "source": [ "# Leere Listen, welche mit den N Werten und der zugehörigen \n", "# Näherung von π gefüllt werden\n", "pis = []\n", "Ns = []\n", "ds = []\n", "\n", "# Aufrufen der obigen Funktion für verschiedene Werte von N\n", "for N in range(1,101):\n", " p = my_pi(N)\n", " \n", " # Füllen der Listen\n", " Ns.append(N)\n", " pis.append(p)\n", " ds.append(abs(p - 3.141592653589793238))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "tags": [ "loesung", "hide-cell" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "N\t ~π\t\t\t ∆π\t\t\t Reduktionsfaktor\n", "===========================================================================\n", "1 \t 2.666666666666667 \t 0.47492598692312615 \t None\n", "2 \t 3.466666666666667 \t 0.32507401307687367 \t 1.4609780167534199\n", "3 \t 2.8952380952380956 \t 0.2463545583516975 \t 1.3195372362982452\n", "4 \t 3.3396825396825403 \t 0.19808988609274714 \t 1.2436503610101148\n", "5 \t 2.9760461760461765 \t 0.16554647754361662 \t 1.1965817034104895\n", "6 \t 3.2837384837384844 \t 0.1421458301486913 \t 1.1646242268974554\n", "7 \t 3.017071817071818 \t 0.1245208365179753 \t 1.1415425251192537\n", "8 \t 3.2523659347188767 \t 0.11077328112908358 \t 1.124105337034043\n", "9 \t 3.0418396189294032 \t 0.09975303466038987 \t 1.110475300387725\n", "10 \t 3.232315809405594 \t 0.09072315581580082 \t 1.0995322391884472\n", "11 \t 3.058402765927333 \t 0.08318988766245994 \t 1.0905550946757718\n", "12 \t 3.2184027659273333 \t 0.0768101123375402 \t 1.0830590547359698\n", "13 \t 3.0702546177791854 \t 0.07133803581060771 \t 1.0767062965044352\n", "14 \t 3.208185652261944 \t 0.06659299867215074 \t 1.0712542944914922\n", "15 \t 3.079153394197428 \t 0.062439259392365276 \t 1.0665244802742384\n", "16 \t 3.200365515409549 \t 0.05877286181975583 \t 1.0623824918353224\n", "17 \t 3.0860798011238346 \t 0.055512852465958495 \t 1.0587253079058843\n", "18 \t 3.1941879092319425 \t 0.0525952556421494 \t 1.0554726236841592\n", "19 \t 3.09162380666784 \t 0.04996884692195325 \t 1.0525609230947106\n", "20 \t 3.189184782277596 \t 0.04759212868780294 \t 1.0499393134890271\n", "21 \t 3.0961615264636424 \t 0.04543112712615072 \t 1.0475665407915518\n", "22 \t 3.1850504153525314 \t 0.0434577617627383 \t 1.0454088126808323\n", "23 \t 3.099944032373808 \t 0.041648621215985226 \t 1.0434381858014234\n", "24 \t 3.1815766854350325 \t 0.039984031845239354 \t 1.0416313536661026\n", "25 \t 3.1031453128860127 \t 0.03844734070378042 \t 1.0399687238006512\n", "26 \t 3.1786170109992202 \t 0.03702435740942711 \t 1.0384337067249407\n", "27 \t 3.1058897382719475 \t 0.03570291531784564 \t 1.0370121621670756\n", "28 \t 3.1760651768684385 \t 0.03447252327864536 \t 1.0356919634009636\n", "29 \t 3.108268566698947 \t 0.03332408689084598 \t 1.0344626513416892\n", "30 \t 3.1738423371907505 \t 0.03224968360095737 \t 1.0333151575433355\n", "31 \t 3.110350273698687 \t 0.031242379891105898 \t 1.0322415806146135\n", "32 \t 3.1718887352371485 \t 0.030296081647355422 \t 1.0312350044063563\n", "33 \t 3.112187242699835 \t 0.029405410889958183 \t 1.0302893491517713\n", "34 \t 3.1701582571925884 \t 0.028565603602795253 \t 1.0293992487902741\n", "35 \t 3.1138202290235744 \t 0.027772424566218756 \t 1.028559949264973\n", "36 \t 3.1686147495715193 \t 0.027022095981726224 \t 1.027767223719431\n", "37 \t 3.115281416238186 \t 0.02631123735160701 \t 1.0270173014145911\n", "38 \t 3.167229468186238 \t 0.025636814596444957 \t 1.0263068078378026\n", "39 \t 3.116596556793833 \t 0.024996096795959932 \t 1.025632714007916\n", "40 \t 3.1659792728432157 \t 0.02438661925342256 \t 1.0249922933639863\n", "41 \t 3.117786501758878 \t 0.023806151830914946 \t 1.0243830849534368\n", "42 \t 3.1648453252882898 \t 0.023252671698496652 \t 1.0238028618644315\n", "43 \t 3.118868313794037 \t 0.022724339795756165 \t 1.023249604058427\n", "44 \t 3.163812134018756 \t 0.022219480428963045 \t 1.0227214748970923\n", "45 \t 3.1198560900627124 \t 0.021736563527080754 \t 1.0222168007965309\n", "46 \t 3.1628668427508844 \t 0.02127418916109125 \t 1.0217340535278847\n", "47 \t 3.1207615795929895 \t 0.020831073996803617 \t 1.021271834777008\n", "48 \t 3.161998692995051 \t 0.020406039405258092 \t 1.0208288626276005\n", "49 \t 3.121594652591011 \t 0.01999800099878213 \t 1.0204039597008128\n", "50 \t 3.1611986129870506 \t 0.01960595939725751 \t 1.0199960427123733\n", "51 \t 3.12236366153074 \t 0.01922899205905315 \t 1.019604113260158\n", "52 \t 3.160458899625978 \t 0.01886624603618481 \t 1.0192272496697334\n", "53 \t 3.1230757220558845 \t 0.018516931533908654 \t 1.0188645997657053\n", "54 \t 3.1597729697623063 \t 0.018180316172513145 \t 1.0185153744413113\n", "55 \t 3.12373693372627 \t 0.017855719863522967 \t 1.0181788419325108\n", "56 \t 3.159135163814766 \t 0.017542510224972663 \t 1.017854322701459\n", "57 \t 3.124352555119114 \t 0.01724009847067931 \t 1.0175411848608447\n", "58 \t 3.158540589307148 \t 0.016947935717354756 \t 1.0172388400686097\n", "59 \t 3.1249271439289967 \t 0.016665509660796385 \t 1.016946739842151\n", "60 \t 3.157984995168666 \t 0.016392341578872927 \t 1.0166643722380413\n", "61 \t 3.125464669965414 \t 0.016127983624379283 \t 1.0163912588610293\n", "62 \t 3.157464669965414 \t 0.015872016375620746 \t 1.0161269521591283\n", "63 \t 3.125968606973288 \t 0.015624046616505183 \t 1.0158710329789729\n", "64 \t 3.1569763589112725 \t 0.015383705321479368 \t 1.0156231083476515\n", "65 \t 3.1264420077662343 \t 0.01515064582355885 \t 1.0153828094613708\n", "66 \t 3.156517195736159 \t 0.014924542146365738 \t 1.0151497898545698\n", "67 \t 3.126887566106529 \t 0.014705087483263934 \t 1.0149237237351745\n", "68 \t 3.1560846463985 \t 0.014491992808706833 \t 1.0147043044645367\n", "69 \t 3.127307667981234 \t 0.014284985608559175 \t 1.0144912431709854\n", "70 \t 3.155676462307475 \t 0.014083808717682 \t 1.0142842674811823\n", "71 \t 3.127704434335447 \t 0.013888219254345913 \t 1.0140831203593565\n", "72 \t 3.155290641231999 \t 0.013697987642205867 \t 1.0138875590421699\n", "73 \t 3.1280797568782575 \t 0.01351289671153566 \t 1.013697354062671\n", "74 \t 3.15492539446215 \t 0.013332740872356919 \t 1.0135122883511718\n", "75 \t 3.1284353282369843 \t 0.01315732535280878 \t 1.0133321564105497\n", "76 \t 3.1545791190866574 \t 0.01298646549686433 \t 1.013156763554002\n", "77 \t 3.128772667473754 \t 0.012819986116038962 \t 1.012985925204481\n", "78 \t 3.1542503744801236 \t 0.01265772089033046 \t 1.0128194662462862\n", "79 \t 3.129093141775721 \t 0.01249951181407205 \t 1.0126572204268247\n", "80 \t 3.1539378622726155 \t 0.012345208682822406 \t 1.0124990298029022\n", "81 \t 3.129397984972002 \t 0.012194668617790949 \t 1.012344744227968\n", "82 \t 3.1536404092144266 \t 0.01204775562463345 \t 1.012194220876884\n", "83 \t 3.129688313406043 \t 0.011904340183749973 \t 1.0120473238054173\n", "84 \t 3.1533569524592977 \t 0.011764298869504586 \t 1.011903923540093\n", "85 \t 3.129965139593801 \t 0.011627513995992267 \t 1.0117638966987668\n", "86 \t 3.153086526877038 \t 0.011493873287244938 \t 1.0116271256353273\n", "87 \t 3.1302293840198954 \t 0.01136326956989775 \t 1.0114934981119492\n", "88 \t 3.1528282540763923 \t 0.011235600486599218 \t 1.011362906989333\n", "89 \t 3.1304818853613083 \t 0.01111076822848478 \t 1.0112352499437802\n", "90 \t 3.1525813328751204 \t 0.010988679285327319 \t 1.0111104291960256\n", "91 \t 3.1307234093778527 \t 0.010869244211940465 \t 1.0109883512650906\n", "92 \t 3.1523450309994745 \t 0.01075237740968138 \t 1.0108689267318556\n", "93 \t 3.1309546566679236 \t 0.010637996921869508 \t 1.0107520700233263\n", "94 \t 3.152118677831945 \t 0.010526024242151877 \t 1.0106376992054829\n", "95 \t 3.131176269454982 \t 0.010416384134811274 \t 1.0105257357948416\n", "96 \t 3.151901658056018 \t 0.010309004466225069 \t 1.0104161045751807\n", "97 \t 3.1313888375431977 \t 0.010203816046595371 \t 1.0103087334335858\n", "98 \t 3.1516934060711166 \t 0.010100752481323472 \t 1.0102035531968996\n", "99 \t 3.1315929035585537 \t 0.00999975003123943 \t 1.010100497489288\n", "100 \t 3.1514934010709914 \t 0.009900747481198291 \t 1.0099995025859558\n" ] } ], "source": [ "# Tabellenkopf\n", "print(\"N\\t ~π\\t\\t\\t ∆π\\t\\t\\t Reduktionsfaktor\")\n", "print(\"=\"*75)\n", "\n", "# Analyse und Ausgabe der Listenwerte\n", "for i in range(len(Ns)):\n", " # f beinhaltet den Reduktionsfaktor\n", " f = None\n", " # f wird nicht für das erste Element berechnet, da es keinen\n", " # vorangehenden Vergleichswert gibt\n", " if i != 0:\n", " # Berechne Verhältnis\n", " f = abs(ds[i-1]/ds[i])\n", " # Ausgabe der Listeneinträge und des Reduktionsfaktors\n", " print(Ns[i], '\\t', pis[i], '\\t', ds[i], '\\t', f)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Tags", "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }