Strumenti Utente

Strumenti Sito


wikipaom2015:lez05

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
wikipaom2015:lez05 [2015/06/26 09:35] 163359wikipaom2015:lez05 [2015/08/05 16:43] (versione attuale) 202447
Linea 1: Linea 1:
 +====== Lezione 5: wxMaxima: Integrazione definita, ossia Quadratura gaussiana======
  
 +In questa lezione abbiamo analizzato, con l'ausilio di alcuni esercizi, **l'approssimazione di integrali definiti** di funzioni generiche attraverso la **Quadratura di Gauss ad uno e due punti**, **l’approssimazione di funzioni semplici con Taylor** ed altri costrutti per iniziare ad approfondire l'utilizzo del wxMaxima.
 +
 +===== 5.1 Comandi utilizzati in wxMaxima =====
 +
 +Sono stati introdotti nuovi comandi per un utilizzo più efficace del manipolatore algebrico. 
 +
 +==== utilizzo del comando := ====
 + 
 + 
 + 
 +
 + 
 +Con questo comando è possibile **definire una funzione**. La funzione richiede di esplicitare dei parametri,       ad esempio:
 +
 +f(x) : x è semplicemente un segnaposto, dove il primo parametro passato alla funzione verrà sostituito ovunque trovi x dentro l’espressione.
 +
 +
 +Nel caso si avessero più parametri, questi vengono separati da delle virgole.  
 +
 +  define 
 +
 +Questo comando permette di definire le funzioni con la **valutazione all’atto della definizione e non all’atto della chiamata.**\\ Perciò, se scrivo 
 +
 +a0:0\\
 +f(x):= a0 + a1*x
 +
 +il programma mi fornisce come output a0 + a1x.\\ Ma se invece digito
 +
 +define (f(x), a0 + a1*x)
 +
 +allora il manipolatore scrive a1x, poichè compie subito la valutazione.
 +  expand
 +
 +Permette di espandere la funzione in **somma di monomi e ne effettua la semplificazione.**
 +
 +  […. , ….] 
 +
 +Si tratta del comando **lista**. Se si vuole avere un **sistema di equazioni** all’interno del manipolatore si crea una lista di equazioni, dove ogni equazione è separata da una virgola.\\
 +In generale una lista può contenere qualunque entità, anche altre liste.
 +
 +   (…)
 +
 +Le parentesi tonde, a differenza delle quadre, denotano un **blocco**.
 +
 +Per creare un ciclo di lista invece si deve creare un **costrutto do**
 +{{:wikipaom2015:ciclo_do.gif?nolink|}}
 +
 +Il ciclo for permette di ripetere una data operazione più volte.
 +
 +   length
 +
 +**Estrae la lunghezza della lista** in esame, e il ciclo for costruisce un polinomio in cui la x è elevata a ciascuno dei termini della lista creata in precedenza. La lunghezza della lista è il numero degli elementi.
 +
 +  wxplot2d 
 +
 +Permette di **plottare la funzione**, ovvero graficarla. Con wx si indica che la figura è di tipo statico, ovvero che viene rappresentata sulla stessa interfaccia.\\  
 +Viene scritta in questo modo:
 +
 +''**wxplot2d ([funzione 1, funzione 2] [variabile, inizio intervallo, fine intervallo])**''
 +
 +ATTENZIONE: **non posso plottare una funzione che contiene parametri senza averli prima definiti**
 +
 +   plot2d 
 +
 +Permette di plottare la funzione **in una nuova finestra**, fuori dal foglio di lavoro.
 +
 +   plot3d 
 +
 +Permette di plottare la funzione lungo le 3 dimensioni.
 +
 +    limit 
 +
 +Svolge l’operazione di **limite**.
 +
 +es) limit (f(x), x, inf)
 +
 +   inf 
 +
 +Rappresenta un **infinito reale positivo**.
 +
 +    append
 +
 +Questo è il comando che permette di **accodare una funzione ad un’altra funzione**.
 +
 +    makelist 
 +
 +Si tratta del comando per la costruzione automatica di funzioni di lista. **Crea una lista scorrendo un indice i**.
 +
 +Un esempio è:
 +
 +{{:wikipaom2015:makelist.gif?nolink|}}
 +
 +<code>
 +questo codice può essere copiaincollato da/a wxmaxima o fortran
 +</code>
 +
 +
 +   taylor  
 +
 +Permette di effettuare l’**espansione in serie di Taylor**.
 +
 +Un classico esempio generico sarebbe:
 +
 +{{:wikipaom2015:taylor.gif?nolink|}}
 +
 +   legend 
 +
 +È la parola chiave che permette di creare una legenda.
 +Può ritornare utile impostare manualmente la legenda, creando una lista sul manipolatore algebrico.
 +{{:wikipaom2015:wxplot2d.gif?nolink|}}
 +
 +Per convertire in una legenda un numero (ad esempio 1) in una stringa utile per la legenda si usa il comando di conversione in stringa denominato __**string**__.
 +
 +   quad-qag 
 +
 +È una funzione di libreria che permette di effettuare l’**integrale in forma numerica con il metodo dei trapezi**.
 +
 +
 +===== 5.2 Quadratura  Gaussiana: algoritmi e implementazioni =====
 +Col termine **quadratura** si intende un'integrazione numerica di integrali, impiegata quando non li si riesce a calcolare in forma analitica. 
 +**Si tratta di una forma numerica approssimata per calcolare rapidamente gli integrali di funzione.**
 +
 +La quadratura gaussiana è una **stima**; non è una delle soluzioni più precise, salvo aumentando i punti di campionamento, ma è molto rapida ed è sempre usata nei codici agli elementi finiti.
 + 
 +
 +
 +===== 5.2.1 Quadratura a un punto di integrazione =====
 +
 +
 +
 +Si supponga di voler risolvere l’integrale normalizzato su un intervallo [-1,1] (dunque simmetrico rispetto all'origine) di una funzione generica f(x) mediante il metodo della quadratura gaussiana (ovvero il campionamento della funzione). Occorre definire innanzitutto un numero n di punti di campionamento xi, lungo l'asse x, ai quali vanno associati biunivocamente i pesi wi. **La somma dei pesi è sempre 2**.\\ L’integrale sarà risolto come **somma pesata dei contributi f(xi)**:
 +   
 +{{:wikipaom2015:funzione_generica_inv.gif|}}
 +
 +$$
 +G = \sum_{i=1}^n w_i f(x_i)  
 +$$
 +
 +La scelta dei punti è totalmente arbitraria, ma se vengono usati i **punti di Gauss** si ottiene la stima migliore, ovvero l'errore minimo nel calcolo dell'integrale. Il seguente esercizio serve a mostrare ciò.
 + 
 +Si pensi alla funzione campione:
 +
 +f(x)=a0+a1*x   con a0 e a1 costanti qualsiasi
 +
 +e si immagini di volerla integrare fissato un punto x1 sull’ asse delle ascisse e un relativo peso w1.
 +
 +{{ :wikipaom2015:funzione_ad_1punto_inv.gif|}}
 +
 +L’ implementazione attraverso il programma MAXIMA avverrà nel seguente modo:
 +
 +{{ :wikipaom2015:code1.png |}}
 +
 +proseguendo con l’ algoritmo risolutivo non resta che calcolare G (cioè il risultato della nostra sommatoria), assegnare un errore al campionamento sotto forma di residuo e trovare due soluzioni costanti in a0 e a1 che rendano costante il residuo senza annullarlo. In altri termini, si vuole che il residuo dipenda solo da x1 (e w1) e non da a0 e a1.\\
 +Implementando:
 +
 +{{ :wikipaom2015:code2.1.png |}}
 +
 +si noti che nel residuo sono presenti le variabili x1 w1 a0 a1  contemporaneamente. Sarà necessario inserire una lista di equazioni da risolvere in una apposita lista di incognite:
 +
 +{{ :wikipaom2015:code2.2.png |}}
 +
 +le equazioni sono state risolte attraverso  la funzione **‘solve’** (e non ‘globalsolve’) a causa della **non linearità del sistema** (dovuta al termine  –w1*x1) ; a posteriori è stato effettuato un controllo della soluzione al fine di non annullare il residuo.
 +===== 5.2.2 Integrazione gaussiana a due punti =====
 +
 +È possibile scrivere allo stesso modo un’integrazione a due punti.
 +Così  si avranno due pesi per i due punti: x1, w1, x2, w2, ovvero si hanno 4 incognite in 4 equazioni.
 +
 +Si parte da una funzione polinomiale che abbia 4 coefficienti su cui fare le derivate del residuo, perciò nel caso specifico sarà una funzione cubica.
 +
 +{{:wikipaom2015:funzione_algebrica.gif?nolink|}}
 +
 +Relegando il calcolo ai manipolatori algebrici si ha:
 +
 +{{:wikipaom2015:integrale.gif?nolink|}}
 +
 +Il polinomio parallelo, secondo Gauss vale:
 +{{:wikipaom2015:funzione_di_gauss_a_due_punti.gif?nolink|}}
 +
 +Si indaga nel seguito per quali scelte dei punti xi e dei pesi wi l’eguaglianza precedente valga esattamente, e si impone che il residuo R si annulli.\\
 +Siccome la precedente eguaglianza deve valere per valori generici dei coefficienti "ai" del polinomio f, tale eguaglianza deve rimanere valida anche per variazioni di tali coefficienti, il che si esprime annullando la derivata del residuo rispetto ai coefficienti "ai":
 +{{:wikipaom2015:derivate_2_punti.gif?nolink|}}
 +
 +dove tali equazioni devono essere associate all’equazione iniziale.
 +
 +Definite le incognite che risolvono le equazioni e combinando le equazioni stesse si ottengono i valori delle incognite.
 +{{:wikipaom2015:soluzione_2_punti.gif?nolink|}}
 +
 +__Si verifica con facilità che l’equazione iniziale R=0 viene soddisfatta dalla scelta dei due pesi w1 e w2 e dei due punti di Gauss x1 e x2.__
 +
 +**
 +In generale, la quadratura gaussiana prevede lo stesso approccio per n punti, e integra esattamente un polinomio di grado 2n-1.**\\
 +I polinomi di gradi diversi da questi valori possono essere considerati casi particolari di quelli di grado superiore, per cui vengono integrati con il tipo di quadratura adatto a questi ultimi.\\
 +es) 2 punti: polinomio di grado 3; quello di secondo grado è un caso particolare di quello di terzo, per cui uso comunque la quadratura a due punti.
 +
 +Si osserva che, se l’integrale si estende tra valori generici a e b e non tra [-1,1], con opportuni cambi di variabile si può riportare l’intervallo di integrazione tra [-1,1], come richiesto dall’integrazione Gaussiana.
 +
 +Infine **l’integrale doppio** può essere risolto tramite integrazione gaussiana poiché è definito come due integrali singoli concatenati. La soluzione è derivata dall’**integrazione a due punti sull’intervallo monodimensionale**: questo vuol dire che per l’integrale doppio basta campionare 4 punti con la regola di integrazione gaussiana.\\
 +Inoltre nell’integrale doppio tutti i **pesi** sono unitari, dato che la loro **somma deve essere uguale a 4**.
 +===== 5.3 Esempi =====
 + 
 +Per inizializzare una funzione del tipo f(x)=a0+a1*x su MAXIMA è possibile applicare vari metodi.
 +
 +==== 1) Assegnare a una variabile il valore di un’ espressione ====
 + 
 +{{:wikipaom2015:funz1.png|}}
 +
 +
 +
 +(n.b. con questa procedura rimane inalterato il carattere di espressione).
 +
 +Oppure è possibile mantenerne il carattere di funzione:
 +
 +
 +{{:wikipaom2015:funz2.png|}}
 +
 +==== 2) Definire una funzione e valutarla a posteriori ====
 +
 +
 +{{:wikipaom2015:aposteriori.png|}}
 +
 +==== 3) Eseguire un cambio di variabile ====
 +
 +{{:wikipaom2015:cambiovariabile.png|}}
 +
 +==== 4) Definire una funzione a priori ====
 +
 +
 +{{:wikipaom2015:apriori.png|}}
 +
 +
 +===== *Bibliografia =====
 +-A. Strozzi, Progettazione Assistita di Strutture Meccaniche
 +
 +-Minimal Maxima
 +
 +~~DISCUSSION|Note di redazione~~
wikipaom2015/lez05.txt · Ultima modifica: 2015/08/05 16:43 da 202447