Archivio categoria: Matematica

Campo magnetico (e velocità indotta da un vortice) lungo una curva generica con MATLAB

Premessa: la lettura di questo articolo potrebbe risultare molto confusa. È talmente specifico che, molto probabilmente, servirà a una persona su un milione. In realtà servirà molto più a me per fissare certe cose che a qualcun altro…

L’induzione magnetica (e la velocità indotta da un vortice, in aerodinamica) è descritta dalla legge di Biot-Savart:

\Gamma =\frac{k}{4\pi}\oint_{C} \frac{dL\times R}{|R^3|}

Dove k è una costante moltiplicativa proporzionale all’intensità (della corrente o del vortice). Per questa legge esistono diverse soluzioni analitiche, per i casi più semplici e anche più frequenti: filo rettilineo di lunghezza infinita, solenoide, …

Potrebbe essere interessante osservare il campo magnetico anche per un filo di una forma più strana, come una spirale a passo non costante, o una forma geometrica complessa. Soluzioni analitiche per forme geometriche complesse non ne esistono ed è necessario integrare numericamente la legge di Biot-Savart.
Concettualmente è molto semplice: divido il filo in piccoli intervalli finiti di lunghezza \Delta L, per ognuno dei quali calcolo l’induzione \Delta \Gamma e infine ne faccio una sommatoria:

\Delta\Gamma=\frac{k}{4\pi}\frac{\Delta L\times R}{|R^3|}
\Gamma = \sum_i \Delta\Gamma_i

Ecco cosa fa il codice che ho scritto: si assegna un dominio di calcolo (non troppo grande, altrimenti ci impiega un’eternità!) e si fa un ciclo per ogni punto del dominio (tre cicli for su i, jk). Per ognuno di questi punti, si discretizza la curva in intervalli di ampiezza ds e si calcola l’induzione di ogni elementino sul punto del dominio in questione, sommando i vari contributi (componenti UV, W).

campo

Non è il massimo dal punto di vista dalle performance, è stata la prima cosa che mi è venuta in mente e non ho neanche pensato se fosse la migliore. Funziona e basta 😀

Un unico appunto lo vorrei fare sull’utilizzo delle meshgrid e del prodotto vettoriale. Il campo magnetico (campo di moto) è descritto da una serie di vettori tridimensionali. Questi vettori dipendono dal punto di applicazione, o meglio, ogni punto del campo ha un suo vettore di induzione, che ne descrive direzione, intensità e verso. In MATLAB, ogni cosa è una matrice e non fanno eccezione i campi vettoriali. Il problema è questo: ogni vettore ha tre componenti, ognuna delle quali è contenuta in una matrice NxNxN. Ho bisogno di tre matrici NxNxN per descrivere il campo vettoriale. Come faccio però a capire in quali punti sono applicati questi vettori?
Qui interviene la funzione meshgrid, che genera una matrice contenente le coordinate dei punti in cui voglio che siano applicati i vettori. Quindi avrò: tre matrici U, V e W contenenti le componenti lungo gli assi xyz dell’induzione e tre matrici XY e Z contenenti i punti di applicazione dei vettori. Quando si fa il calcolo del \Delta\Gamma di Biot-Savart bisogna tenere presente quanto detto: per il calcolo del vettore R dovrò considerare le matrici XYZ, dato che mi interessa il punto di applicazione del vettore.

Forse era una precisazione banale. Forse no.

Considerazioni aerodinamiche

Il codice permette di integrare la legge di Biot-Savart, che è nota nella fisica per l’induzione di un campo magnetico. In aerodinamica viene invece utilizzata per calcolare la velocità indotta da un vortice. È interessante andare a calcolare il campo di moto nella scia di un’ala utilizzando questo codice.

La Teoria del Filetto Portante di Prandtl ci spiega come sia possibile modellare il campo di moto attorno ad un’ala mediante un sistema di vortici. La schematizzazione più semplice di questo sistema di vortici è il cosiddetto vortice a staffa, di cui rubo senza pietà un’immagine da Google:

vortice_staffa

Inserendo nel codice i punti di un vortice a staffa:

L = [-1 6 0;
     -1 0 0;
      1 0 0;
      1 6 0];

Si ottiene un campo di moto di questo tipo:

linee_campo

Non è molto preciso perché è stato calcolato su un dominio di 20 punti, ma rende comunque l’idea.
Se a questo campo di moto sommiamo una corrente uniforme, otteniamo il campo di moto attorno a un’ala:

vortici1

trittico

Il confronto con un’immagine ottenuta per via sperimentale (linee di fumo) mostra la validità di questa teoria:

vortici_ala

Download dell’animazione in 3D (.avi, 4.9 MB)

Un’altra figura interessante che è possibile ottenere è quella relativa al downwash:

downwash

L’immagine è stata ottenuta utilizzando la funzione surf alla componente verticale della velocità.

Da questa figura si possono notare due cose: la prima è che il vortice parallelo all’ala (vortice aderente) produce un upwash sulla corrente incidente, la seconda è che il downwash è dovuto essenzialmente all’effetto dei vortici laterali (vortici liberi).

Tutte le figure delle linee di corrente sono state ottenute utilizzando la funzione streamtube, che prende in input le mesh, il campo di moto e tre vettori/matrici contenenti i punti da cui devono partire le linee di corrente.

Potete scaricare il codice dal seguente link, o dal file exchange di MATLAB.

Download biot_savart.zip
Download da MATLAB file exchange


Simulatore di Giroscopi in MATLAB

retrogrado– Download del codice – eulero.zip

Ultimamente ho passato un po’ di tempo a giocare con la funzione ode45 di MATLAB e, dopo aver speso una decina di minuti necessari a capire come impostare i vari parametri di funzionamento, ho iniziato ad integrare tutte le equazioni differenziali che ho incontrato nel corso degli studi.

Tra i vari problemi in cui mi sono cimentato ultimamente, c’è quello delle Equazioni di Eulero, ossia le equazioni che descrivono le rotazioni di un oggetto di forma arbitraria soggetto a dei momenti forzanti. In questo articolo voglio proporre un codice scritto da me che permette la risoluzione di queste equazioni e ne mostra i risultati sottoforma di animazione.

Impostazione del problema

Per prima cosa, impostiamo il problema. Abbiamo un corpo di forma arbitraria nell’ipotesi semplificativa, grazie a opportune simmetrie, di prodotti d’inerzia nulli; chiameremo i momenti principali d’inerzia AB e C. Questo corpo ha un orientamento nello spazio che è descritto da una terna di angoli di Eulero; in particolare, è stata scelta una sequenza del tipo XYZ e gli angoli sono stati rinominati\psi, \theta, \phi. Il corpo è soggetto ad un momento le cui componenti attorno agli assi xy, z, sono state rinominate L(t)M(t)N(t). Le equazioni da risolvere, in questi termini, sono:

\left\{\begin{matrix} A\ddot\psi=L + \dot\theta\ \dot\phi\ \left(B-C\right)\\ B\ddot\theta=M + \dot\psi\ \dot\phi\ \left(C-A\right) \\ C\ddot\phi=N + \dot\psi\ \dot\theta\ \left(A-B\right)\\ \end{matrix}\right.

La funzione che utilizziamo per integrare le equazioni è, come preannunciato, ode45. Questa funzione accetta in input una function(t,y), il cui valore è il secondo membro di un’equazione differenziale del primo ordine. Il nostro sistema è del secondo ordine, ma è facilmente trasformabile in un sistema del primo ordine utilizzando altre tre equazioni. Chiamando:

\dot\psi=\omega_x\ \ \ \ \dot\theta=\omega_y\ \ \ \ \dot\phi=\omega_z

Il sistema diventa:

\left\{\begin{matrix}A\ \dot\omega_x=L + \omega_y \omega_z\ \left(B-C\right)\\B\ \dot\omega_y=M + \omega_x\ \omega_z\ \left(C-A\right) \\C\ \dot\omega_z=N + \omega_x\ \omega_y\ \left(A-B\right)\\\dot\psi=\omega_x\\ \dot\theta=\omega_y\\ \dot\phi=\omega_z\end{matrix}\right.

Il codice

– Download del codice – eulero.zip

Per quanto riguarda il codice, questo è diviso in tre file:

  • main.m – contenente il codice principale del programma
  • eulero.m – contenente il sistema di equazioni da integrare
  • ang2dcm.m – funzione che restituisce la matrice dei coseni direttori utilizzata per le rappresentazioni grafiche

Iniziamo dal main.m.

Mostra codice ▼

Questa prima parte del codice è molto semplice. Si limita a pulire la memoria, definire due variabili del problema e mostrare un menù di scelta che presenta alcuni casi di problemi preimpostati. L’intero gruppo switch può essere ovviamente rimpiazzato da uno solo dei casi.
Notare che le leggi temporali delle componenti del momento L, M ed N, sono state definite utilizzando le anonymous function, che consistono nell’unico caso in cui è possibile definire una function all’interno di uno script in MATLAB. Queste funzioni sono state definite utilizzando un’altra comodissima routine, che è interp1: questa funzione prende in input (nel nostro caso) due vettori (uno di tempi e uno dei valori del momento) ed uno scalare. Utilizzando una semplice interpolazione lineare permette di restituire un valore della funzione al tempo t, interpolando i valori di M che sono stati forniti a determinati istanti di tempo. In pratica, tu gli dici quanto vale M al tempo 0, 1 e 5, lui ti dice quanto vale M in un qualsiasi istante compreso nell’intervallo [1,5], interpolando linearmente. Le funzionalità di interp1 sono molto più vaste, ma nel nostro caso la utilizziamo semplicemente per questo.

Vediamo ora come impostare il calcolo vero e proprio.

Mostra codice ▼

La funzione odeset permette di impostare i parametri relativi all’algoritmo di integrazione. Senza addentrarci troppo nel suo funzionamento, ci limitiamo a settare i parametri di precisione, il cui valore influenza pesantemente il tempo di integrazione.

La funzione waitbar, come dice il nome, permette di creare una barra di caricamento a partire da un valore compreso tra 0 e 1, che nel nostro caso sarà l’intervallo di tempo di integrazione normalizzato. È una funzione comodissima, da quando l’ho scoperta la piazzo praticamente ovunque 😀

La funzione ode45 è quella che effettua l’integrazione. Per il funzionamento nel dettaglio si rimanda all’help di MATLAB, ma per quanto riguarda il nostro problema è sufficiente sapere che accetta in input una funzione (nel nostro caso eulero.m) che restituisce un vettore di sei righe, il cui valore è quello del secondo membro del sistema di equazioni differenziali (opportunamente modificato in modo da avere a primo membro le sole derivate prime delle variabili).

\left\{\begin{matrix}\dot{y}(1)=f_1(y,\ \ldots)\\ \dot{y}(2)=f_2(y,\ \ldots) \\ \ldots\end{matrix}\right.

La funzione che andiamo ad integrare dipende dal tempo t, dal vettore di stato y e da una serie di parametri aggiuntivi Par:

Mostra codice ▼

Questa funzione viene richiamata ad ogni step di integrazione. Il suo compito è valutare le derivate prime del vettore di stato y. Oltre a fare ciò, questa funzione aggiorna anche la barra di caricamento ad ogni step. In questo modo potremo sapere graficamente a che punto dell’integrazione siamo arrivati.

La terza parte del codice, la più divertente, è quella che mostra graficamente i risultati dell’integrazione.

Mostra codice ▼

Vengono create due finestre: nella prima viene mostrato l’andamento degli angoli di Eulero, nella seconda l’animazione di un corpo che si muove secondo gli angoli di Eulero trovati.

La prima figura è molto semplice. L’unica particolarità è che gli angoli\theta e\phi vengono limitati agli intervalli [-180, 180] e [0, 360].

angoliPrima di procedere con l’animazione è necessario conoscere un comportamento peculiare di ode45: insieme al vettore Y contenente le variabili di stato integrate, viene restituito anche un vettore temporale T cui corrispondono gli istanti di tempo relativi ad Y. Questo vettore è, generalmente, non lineare. ode45 ha infatti la capacità di modificare il passo di integrazione rendendolo più o meno fitto a seconda della variazione del vettore di stato. Se utilizzassimo questo vettore senza modificarlo, il risultato sarebbe un video che va piano quando ci sono variazioni irregolari di Y e veloce quando Y è più regolare.
Per ottenere un’animazione fisicamente realistica dobbiamo quindi linearizzare il tempo.

In questo caso, ho deciso di prendere 300 time-step per ogni secondo di simulazione (dovreste metterlo più grande se il vostro computer è performante, più piccolo nel caso contrario). La funzione linspace genera un vettore equidistanziato tra 0 e tfin. La funzione interp1 permette di valutare il vettore di stato in questi nuovi istanti di tempo, interpolando il vettore risultato di ode45.

Gli oggetti che vengono rappresentati graficamente sono tre: un cilindro, l’asse del disco e la sua traccia. Il cilindro ha sempre le stesse dimensioni, indipendentemente dai valori dei momenti di inerzia impostati. Ciò può essere fuorviante nel caso in cui A e B siano diversi tra loro (es. case 3), ma non importa.

Sia per la rappresentazione del cilindro che per l’asse, è necessario utilizzare la matrice dei coseni direttori. Questa matrice consente di rappresentare un generico vettore[x_0,\ y_0,\ z_0] utilizzando gli angoli di Eulero. Per chi avesse installato l’Aerospace Toolbox di MATLAB, esiste una funzione angle2dcm che consente di scrivere una matrice di rotazione per una qualsiasi sequenza di rotazioni.
Dato che non tutti hanno questo strumento, ho aggiunto al codice la funzione ang2dcm, la quale non è altro che una versione semplificata di angle2dcm limitata alla sola sequenza XYZ, che è quella che ho utilizzato.

La traccia dell’asse viene mostrata soltanto per gli ultimi 150 timestep, in modo da non appesantire la rappresentazione grafica.

Nel codice sono presenti una serie di istruzioni commentate riferenti la variabile Mov e la funzione getframe. Questa funzione permette di acquisire l’immagine della figure per poterne creare successivamente un video. Se la utilizzate, tenete presente che richiede molta RAM e rallenta notevolmente il codice.

Assi giunti

giroscopioSpesso i giroscopi si studiano utilizzando un sistema di riferimento diverso da quello utilizzato da me. Si considera il giroscopio montato su uno snodo cardanico (vedi figura) e si scrivono angoli e momenti rispetto agli assi degli snodi.

Questa formulazione è molto più conveniente da un punto di vista pratico, ma porta ad una formulazione delle equazioni più articolata. Senza addentrarci troppo nel discorso, la differenza sostanziale nell’utilizzo di ode45 per questo tipo di sistema è che una delle equazioni presenta due termini del secondo ordine. Per questo motivo è necessario impostare mediante odeset una matrice di massa (funzione come al solito di yt) previa scrittura del sistema in questa forma:

equazione

La matrice di massa funziona esattamente come la funzione eulero.m. Notare che nel nostro caso la matrice di massa non è stata impostata, anche se questa corrisponderebbe alla matrice identità.

Video

Ecco infine i video dei 4 case proposti:

retrogrado spirale notadisk piccolo

– Download del codice – eulero.zip


Come utilizzare Wolfram Alpha per l’esame di Analisi

Ho già parlato delle potenzialità di Wolfram Alpha in un precedente articolo, ciò che voglio fare ora è descriverne il suo funzionamento finalizzato all’esame più temuto al primo anno delle facoltà scientifiche: Analisi matematica.

Innanzitutto, è importante sapere che tutte le operazioni matematiche svolte da Wolfram Alpha, sono eseguite da Wolfram Mathematica, un software commerciale della Wolfram. La sintassi di Wolfram Alpha non è la stessa di Mathematica, ma essendo in grado di comprendere quasi ogni tipo di richiesta, spesso riesce ad interpretare anche la sintassi di Mathematica.

I comandi che utilizzo in questo articolo come input per Wolfram Alpha non sono gli unici comandi che si possono utilizzare per ottenere lo stesso risultato. Ad esempio, se voglio calcolare la somma di due numeri, posso scrivere “4+9“, “sum of 4 and 9“, “what is the sum of 4 and 9?” o ancora “can you tell me the sum of 4 and 9?“.
Se trovate dei comandi più intuitivi di queli che ho utilizzato io, ben venga :).

Funzioni

La prima cosa che possiamo provare a fare con Wolfram Alpha è uno studio di funzione.
Consideriamo la funzione:

f(x)=\frac{\sqrt{1-x^2}}{3-x}

Inserendo l’espressione di questa funzione in Wolfram Alpha (link), il programma ci fornirà una serie di informazioni utili per lo studio della funzione:

  • Input: è la funzione che abbiamo appena inserito.
  • Plots: una serie di grafici caratteristici della funzione. Il primo per x da -4 a 6, il secondo per x da -40 a 40. Gli estremi dei grafici variano a seconda della funzione e sono generati in modo da permettere una visione di tutte le sue particolarità.
    Entrambi i grafici sono costituiti da una linea rossa e una linea blu. Se si considera la funzione definita solo in un sottoinsieme dei numeri reali, il dominio è x\in\left[-1,+1\right] a causa della radice, e il grafico è rappresentato dalla linea blu. Se però consideriamo la funzione in un sottoinsieme dei numeri complessi, la radice è definita sempre e l’unica limitazione del dominio è x\ne 3. La linea rossa rappresenta quindi la parte immaginaria della funzione e in x=3 è tracciata una linea verticale che ne costituisce un asintoto.
  • Alternate forms: una serie di espressioni alternative con le quali possiamo esprimere la nostra funzione. È molto utile ad esempio se la nostra funzione va considerata in un prodotto di funzioni e ci sono elementi che si possono semplificare.
  • Roots: sono le radici (o zeri) della funzione, ossia i valori delle x per i quali la funzione vale zero.
  • Series expansion at x = : è lo sviluppo in serie di Taylor della funzione, con punto di partenza in alcuni valori caratteristici della funzione come le radici, l’origine e all’infinito.
    Per calcolare lo sviluppo in serie di Taylor con un punto di partenza diverso, basta scrivere “f(x) series expansion in x=k“, dove f(x) è la nostra funzione e k il punto di partenza che ci interessa (link).
    Verrà inoltre effettuato un grafico di confronto tra la funzione e i suoi sviluppi in serie di primo e secondo ordine:
  • Derivative: è la derivata della funzione rispetto ad x.
  • Indefinite integral: è l’integrale indefinito della funzione, ossia una sua primitiva. Notare che tan^{-1} e sin^{-1} sono rispettivamente Arcotangente e Arcoseno, come è scritto in basso a destra.

Conoscere l’espressione della derivata e dell’integrale di una funzione è senza dubbio un’informazione notevole, per chi è alle prese con uno studio di funzione. Ma un’informazione ancora migliore sarebbe conoscere i passaggi da seguire per arrivare all’espressione di quella derivata o integrale. Ebbene, Wolfram Alpha ci fornisce persino questa informazione.
Cliccando infatti su Show steps verranno mostrati tutti i passaggi che bisogna seguire per risolvere quella derivata o quell’integrale.
Per l’integrale suggerisce infatti di effettuare prima una sostituzione trigonometrica, poi una seconda sostituzione e infine mostra il valore di ogni integrale che permette di arrivare alla soluzione finale (link).
(beh, sì, ho inventato una funzione che ha un integrale davvero particolarmente complesso!)

  • Global maximum/minimum: sono i punti di massimo e minimo assoluti della funzione, con i rispettivi valori.
  • Limit: sono dei limiti della funzione calcolati a -\infty e +\infty. Ovviamente viene considerata la parte immaginaria della funzione, dato che la parte reale è definita soltanto tra -1 e +1.
  • Series representations: un’altra rappresentazione in serie della funzione.
  • Property: nel caso in cui la funzione soddisfi particolari proprietà di simmetria o periodicità, queste verranno indicate sotto questa voce. Ad esempio, nel caso del seno, ci informa che questo è periodico di 2\pi (link).

Integrali e derivate

Abbiamo già visto come nello studio di funzione Wolfram Alpha sia in grado di calcolare, tra le varie cose, un integrale o una derivata.
Se però abbiamo bisogno di maggiori informazioni su un integrale o una derivata, basterà inserire come input “integrate f(x)“, oppure “derivate f(x)“, dove f(x) è la nostra funzione (link 1, link 2).

Come prima, dopo aver calcolato il valore della derivata o dell’integrale con tanto di passaggi intermedi, verranno riproposte una serie di informazioni relative allo studio di funzione, dove questa volta la funzione studiata è la derivata o l’integrale della funzione che stavamo studiando. E quindi: grafico, forme alternative, radici, sviluppi in serie, ecc…

Potrebbe essere necessario però calcolare il valore di un integrale definito.

\int_a^b f(x)dx

Basterà inserire come input “integrate f(x) from a to b“, dove a e b sono i nostri estremi di integrazione (link).
Verrà mostrato il valore numerico dell’integrale e una sua rappresentazione grafica.
Qualora il risultato dovesse essere espresso in forma decimale, è possibile mostrare quante cifre decimali si desidera cliccando su More digits.

Un’altra operazione interessante è quella di derivata parziale. Se abbiamo infatti una funzione definita in \mathbb{R}^2:

f(x,y)=\frac{3x^2-2xy+8xy^2}{\sqrt{y^2-x^2}}

Per avere la derivata rispetto ad x, basta scrivere “derivate f(x,y) in x” e quella rispetto ad y “derivate f(x,y) in y” (link).

Ancora una volta, con i relativi passaggi (Show steps).

Risoluzione di equazioni

Wolfram Alpha offre una quantità inimmaginabile di strumenti matematici. Uno dei più semplici e più utilizzati, è la risoluzione di equazioni.
Risolvere un’equazione è semplicissimo, basta digitare “solve eq(x)“, dove eq(x) è la nostra equazione (link).
Oltre alle soluzioni reali, verranno ovviamente fornite anche le soluzioni in campo complesso.

Per risolvere un sistema di equazioni, siano esse di qualsiasi tipo, basta scrivere le equazioni separate da una virgola.
Esempio: “solve x+3y=5, 4x-8y=0” (link).

Oltre alla risoluzione di equazioni tradizionali, Wolfram Alpha è in grado di risolvere molti altri tipi di equazioni, come ad esempio le equazioni differenziali. Per risolvere, ad esempio, questa equazione differenziale:

y(x)+3y

basta digitare “solve y(x)+3y'(x)=x^2” (link). Verrà restituito il tipo di equazione differenziale (nel nostro caso ordinaria lineare di primo ordine), l’insieme di funzioni che soddisfano l’equazione (se esiste), il grafico di una delle soluzioni con la relativa derivata, e un grafico dell’andamento di queste funzioni:

Le capacità di Wolfram Alpha non si fermano neanche davanti ad un’equazione differenziale non lineare di terzo ordine, come l’Equazione di Blasius:

2f^{

Questa equzione non ha soluzioni analitiche, ma esclusivamente numeriche.
Wolfram Alpha non dà la soluzione numerica (forse sarebbe troppo!) ma ci fornisce comunque un grafico dell’andamento della funzione e delle sue derivate (link).

Per informazione, l’equazione può essere risolta comunque semplicemente utilizzando Wolfram Mathematica, con i tre seguenti comandi:

sol=NDSolve[{f'''[x]+0.5f[x]*f''[x]==0,f'[0]==0,f[0]==0,f'[50]==1},f,{x,0,10}]
b[x]=f[x]/.sol
Style[TableForm[{Table[x,{x,0.1,8,0.2}],Table[{Evaluate[f[x]/.sol]},{x,0.1,8,0.2}],Table[{Evaluate[f'[x]/.sol]},{x,0.1,8,0.2}],Table[{Evaluate[f''[x]/.sol]},{x,0.1,8,0.2}]},TableDirections->Row,TableHeadings->{{"n", "f", "f'", "f''"},None}],12]

Successioni e serie numeriche

Per quanto riguarda successioni e serie numeriche, l’informazione che generalmente interessa lo studente di Analisi è la convergenza.

– Per le successioni, basta calcolare un limite. Il comando per risolvere un limite è “limit f(n) n to k“, dove f(n) è la successione, k è il valore a cui fate tendere n (per infinito, è infinity).
Ad esempio, per la successione:

f(n)=\frac{n}{n+1}

basta digitare “limit n/(n+1) n to infinity” (link).

– Per le serie numeriche il comando è “sum f(n) n to infinity“. Ad esempio per:

\sum_{n=1}^{\infty} \frac{1}{n^2+1}

basta digitare “sum 1/(n^2+1)” (link).
Anche qui, come per integrali e derivate, le informazioni fornite sono molto interessanti:

  • Infinite/approximate sum: il valore della sommatoria in forma analitica (se esiste) e decimale.
  • Finite sum approximation: è una stima della somma per valori di n finiti. (il suo valore non indica che la serie converge!)
  • Convergence tests: questa voce è molto interessante, perché ci informa di quali criteri di convergenza sono stati applicati, e quali di questi sono soddisfatti.
  • Partial sums: è un grafico delle somme parziali che mette in mostra l’andamento della serie.
  • Partial sum formula: è un’espressione per le somme parziali.

Infine, ecco il link del portentoso strumento:
http://www.wolframalpha.com

Alternate forms


Successioni numeriche logiche

Questo articolo rappresenta una sfida a tutti gli utenti che lo leggeranno.

Di seguito sono rappresentate alcune serie di numeri che si susseguono con una logica, provate a capire qual è, trovando i due numeri successivi di ognuna.
Le soluzioni sono cifrate in ROT13 per evitare click accidentali.

I nomi delle serie sono generati casualmente in Python.

Sfrinfralgubbro
1, 3, 7, 15, 31\dots
Mostra soluzione ▼

Schiodo nistragobbe
152, 160, 167, 181, 191, 202, 206, 214\dots
Mostra soluzione ▼

Gliubbolgli trunmurpiri
24, 27, 32, 39, 42\dots
Mostra soluzione ▼

Nacclastlonne
5, 8, 12, 18, 24, 30\dots
Mostra soluzione ▼

Linfonsgrisgu sfrittrariaco
333, 360, 378, 546\dots
Mostra soluzione ▼

Mussoqquedro (difficile!)
0, 6, 11, 15, 22, 32, 42, 51\dots
Mostra soluzione ▼

Drosophila melanogaster
0, 4, 11, 17, 28, 36, 45, 59\dots
Mostra soluzione ▼


Che freddo.

Ghiaccio di fuocoOggi fa così freddo, che la temperatura è tanto bassa da poter essere approssimata con il suo seno.

Specie per chi è abituato a temperature positive…


Teorema di Laplace in C++

laplaceIn questo articolo spiegherò come scrivere un programma in C++ che calcoli il determinante di una matrice utilizzando il Teorema di Laplace.

Il Teorema di Laplace afferma: “Data una matrice quadrata di ordine n, il suo determinante è uguale alla somma dei prodotti degli elementi di una qualsiasi riga (o colonna) per i rispettivi complementi algebrici“.
Il complemento algebrico dell’elemento aij appartenente alla matrice M, è il determinante della matrice che si ottiene cancellando la i-esima riga e la j-esima colonna dalla matrice M, preso con il segno + se i+j è pari, segno se i+j è dispari.

M = \left( \begin{matrix} a_{11}&\underline{a_{12}}&a_{13}\\ a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}&a_{33} \end{matrix} \right)
A_{12} = (-1)^{1+2}\cdot\left| \begin{matrix} a_{21}&a_{23}\\ a_{31}&a_{33} \end{matrix} \right|
\left|\text{M}\right|=a_{11} \cdot A_{11}-a_{12}\cdot A_{12}+a_{13} \cdot A_{13}

Leggi il resto dell’articolo »


Il vero test del Quoziente Intellettivo

intelligenzaIl quoziente intellettivo (IQ) è un punteggio che misura l’intelligenza di una persona tramite un test.
Esistono numerosi test relativi all’IQ che possono misurare i diversi tipi di intelligenza di un individuo (linguistica, logico-matematica, spaziale, musicale…); quello che voglio proporre quest’oggi è relativo alla logica.
Anche se non è del tutto recente (risale al Maggio 2003) è un test validissimo, ed è stato sviluppato dalla versione danese della Mensa: Mensa Danmark.

Il test è strutturato in questo modo: avete a disposizione 40 minuti per rispondere a 39 quesiti. Ogni quesito richiede di completare un’immagine con una delle otto scelte disponibili.
Se non siete in grado di rispondere ad un quesito potete proseguire e rispondere successivamente. La difficoltà incrementa gradualmente e il punteggio finale è indipendente dal tempo, quindi se finite prima non avrete alcun vantaggio. Prendetevela con tutta calma!

iq

Le risposte ai primi quesiti saranno piuttosto scontate, ma quando inizieranno a complicarsi sappiate che la risposta esatta sarà sempre “la più logica” 🙂
Al termine del quiz vi verrà mostrato il vostro punteggio IQ, e il grafico della deviazione standard.

iq2

Ecco il link per effettuare il test (la lingua italiana non è disponibile, ma il test è costituito da sole immagini):

Link: http://www.iqtest.dk


Angoli arrotondati con le librerie GD in PHP

angoloPer creare delle immagini aventi gli angoli arrotondati esistono numerosi sistemi.
Cercando su Google ho trovato alcuni script fatti molto bene, ma utilizzano tutti un’immagine esterna di un angolo arrotondato, che adattata oppurtunamente, viene sovrapposta all’immagine.

In questo articolo spiegherò come fare a creare degli angoli arrotondati utilizzando le librerie GD in PHP, senza immagini esterne di angoli, ma con la semplice definizione di circonferenza.
Leggi il resto dell’articolo »