{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Programmare in Python\n", "\n", "## Esercizi: Numpy\n", "\n", "In questi esercizi array si riferisce a numpy.array\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__1 - Create un array di 50 elementi, ciascuno uguale a $e$, la base dei logaritmi naturali. Verificate che l'array contenga esattamente 50 elementi.__ " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__2 - Create un array `angles` che contenga tutti gli angoli fra 0 e 360 gradi, in incrementi di un grado. Quanti sono gli elementi? Calcolate il seno e il coseno di tutti gli elementi di `angles`.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__3 - Create un array di nove numeri equidistanti, il cui primo e ultimo elemento siano rispettivamente 0 e 23, e assegnarlo alla variabile r. Calcolate il quadrato di ciascun elemento di r. Calcolate il doppio di ogni elemento di r usando 1) moltiplicazione 2) somma.__ " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__4 - Create un array da 13 a 19, 19 escluso, in incrementi di 0.2__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__5 - Create un array da 13 a 19, 19 incluso, in incrementi di 0.2. Calcolate l'esponenziale din ciascun elemento dell'array.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__6 - Calcolate la coordinata y di 200 punti della parabola y = 0.5\\*x\\*\\*2 -x +2 per valori di x equidistanziati e compresi fra -2 e 2, estremi inclusi.__ " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__7 - Create un array 5 × 5 che sia zero dappertutto ad eccezione della diagonale dove gli elementi sono [1,2,3,4,5]. Determinare size e shape dell'array.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__8 - Create un array 8 × 8 con righe alternate di uno e zero.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__9 - Create un array 7 × 7 con colonne alternate di uno e zero.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__10 - Dato l'array k = np.arange(2, 100, 3), aggiungete 100 a tutti i multipli di 7.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__11 - Costruite la matrice:__\n", "$$A = \\begin{bmatrix} -2 & 3\\\\ 4 & 5 \\end{bmatrix}$$\n", "__Calcolate il determinante e, se possibile, l'inversa. Se l'inversa esiste controllate il vostro risultato calcolando il prodotto della matrice $A$ e della sua inversa.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__12 - Risolvete il sistema di equazioni lineari:__\n", "$$ 3 a + b - c = 1$$\n", "$$ a - b + 2 c = 3$$\n", "$$ -2 a + 3 b = 2$$ " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__13 - Scrivete una funzione che calcoli la distanza euclidea fra due punti in uno spazio ad N dimensioni, qualunque sia N.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__14 - La posizione, al tempo t, di una palla che sia stata lasciata cadere con velocità iniziale nulla da una altezza $h_0$ è data da:\n", "$$y = h_0 − \\frac{1}{2}\\, g\\, t^2$$ \n", "dove $g = 9.81 m/s^2$. Supponiamo $h0 = 10\\, m$. Trovate la sequenza di tempi a cui la palla completa ciascun intervallo di lunghezza mezzo metro, supponendo che la palla sia lasciata cadere a t=0.
\n", "Suggerimento: create un array NumPy per y che va da 10 a 0 in incrementi di −0.5 usando la funzione arange.
\n", "Salvate il vostro codice in una funzione. Una volta creati gli array y e t eseguite il comando `list(zip(t, y))`. Interpretate il risultato.__
\n", "(D.J.Pine - Introduction to Python for Science and Engineering)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__15 - Ricordando che la velocità media su un intervallo $\\Delta t$ è definita come $\\bar{v} = \\Delta y/\\Delta t$, trovate la velocità media per ciascun intervallo del problema precedente utilizzando gli array NumPy.
\n", "Suggerimento: cosa sono gli array y[1:20] e y[0:19]?.
\n", "Bonus 1: riuscite a immaginare un modo più elegante di rappresentare y[1:20]-y[0:19] che non fa riferimento esplicito al numero di elementi dell'array y, cioè che funzionerebbe per un array di lunghezza arbitraria?
\n", "Bonus 2: Calcolate l'accelerazione in funzione del tempo usando la formula $\\bar{a} = \\Delta v/\\Delta t$. Esprimete i tempi a cui le velocità sono calcolate prendendo il punto medio degli intervalli dell'array dei tempi usato in precedenza. Spiegate il risultato ottenuto per le accelerazioni.__
\n", "(D.J.Pine - Introduction to Python for Science and Engineering)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__16 - Costruite una funzione `Cull(A,n)` in cui A è un array bidimensionale di numeri interi e n è un intero positivo. La funzione `Cull` deve sostituire tutti gli interi divisibili per `n` in A con 0 e restituire il risultato. Testate la funzione con la matrice:__\n", "```\n", "D = np.array(\n", "[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],\n", " [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24],\n", " [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36],\n", " [4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48],\n", " [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60],\n", " [6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72],\n", " [7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84],\n", " [8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96],\n", " [9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108],\n", " [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120],\n", " [11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 132],\n", " [12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144]]\n", ")\n", "```\n", "__e `n` = 3.__ \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__17 - Data la matrice:__\n", "$$\n", "R = \\left( \\begin{matrix}\n", "1 & 0 & 1 & -1 \\\\\n", "1 & 2 & 2 & 0\\\\ \n", "0 & 1 & -1 & 1\\\\\n", "2 & 0 & 1 & -1\\\\\n", "\\end{matrix} \\right)\n", "$$\n", "\n", "__Verificate che la matrice è invertibile. Calcolate la matrice inversa `Rinv` e usate `Rinv` per risolvere\n", "i sistemi di equazioni lineari R\\*X=B1 e R\\*X=B2 con B1 = [1,1,2,1] e B2 = [10,0,0,1]. X è il vettore delle incognite.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__18 - Costruite una funzione column(A,n), dove A è un array a due dimensioni e n è un intero $\\ge$ 0,\n", "che restituisca la somma degli elementi della colonna di indice n della matrice A, se A ha almeno n+1 colonne, altrimenti restituisca zero.__
\n", "__Verificate la vostra funzione sulla matrice:__\n", "$$\n", "R = \\left( \\begin{matrix}\n", "1 & 1 & 0 \\\\\n", "1 & 2 & 2 \\\\ \n", "0 & 1 & -1 \\\\\n", "\\end{matrix} \\right)\n", "$$\n", "\n", "__per n = 1 e n = 4.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__19 - Risolvere il sistema di equazioni:__\n", "$$x+2y +3z+4t=2$$ \n", "$$-x+3y-6z+8t=0$$\n", "$$x+ y-z +t=-1$$\n", "$$2y-z-t=1$$\n", "__Verificare che la soluzione trovata soddisfa le equazioni di partenza.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__20 - Scrivere una funzione che prenda come input due vettori, v1 e v2, di dimensione arbitraria, e restituisca la scomposizione di v1 in due vettori w1 e w2, il primo parallelo a v2 e il secondo ortogonale a v2.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "hide_input": false, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.12" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }