Informatica 5 Liceo Scientifico Scienze Applicate/Area
Calcolo di un integrale finito
[modifica | modifica sorgente]Per calcolare l'integrale finito di una funzione ad esempio utilizzando Octave procediamo nel seguente modo
1) creiamo un file che si chiama funzdaintegrare.m e scriviamo il seguente codice
function [y]= funzdaintegrare(x) y=5.*sin(x)+3;
questo codice definisce una funzione che si chiama funzdaintegrare che riceve un valore in ingresso (rappresentato dal parametro x) e che restituisce un valore ( rappresentato da y), internamente alla funzione si usa il parametro x per calcolare il valore assunto dall'espressione che vogliamo integrare 5sin(x)+3 che viene assegnato alla variabile y
2) creiamo un secondo file in octave con un nome qualsiasi ad esempio integrazionemediantetrapezi.m (ricordatevi di non usare spazi nel nome del file) e scriviamo il seguente codice
a=0; b=2; tolleranza=0.001;
area=0; n=1;
do areaold=area; n=n*2; delta=(b-a)/n; area=0; for i=0:n-1 area=area+delta*(funzdaintegrare(a+i*delta)+funzdaintegrare(a+(i+1)*delta))/2; end until(tolleranza>abs(area-areaold))
printf("l'area vale %f \n", area); printf("n= %i \n",n);
%verifica tramite funzione di integrazione di octave % v=valorearea, ier diverso da 0 indica errori nella procedura di calcolo % nfun e' il numero di suddivisioni usate (l'algoritmo e' di simpson?) % err e' la precisione del calcolo printf("tramite le funzioni di octave otteniamo invece\n"); [v, ier, nfun, err]=quad("funzdaintegrare", a, b, [tolleranza,0])
Nelle prime righe assegno ad a e b i valori numerici che esprimono gli estremi di integrazione dell'integrale finito e la precisione (tolleranza) che si vuole ottenere
indichiamo con n il numero di suddivisioni dell'intervallo ab ( inizialmente 2 parti poi 4 parti poi 8 ,16 e cosi' via fino a ottenere la tolleranza fissata) . Ci sono due variabili che indicano l'area dell'integrale indicate con areaold e area, in areaold c'e' il valore dell'area calcolata nel precedente ciclo i (con n= 2^i) e invece in area quella calcolata nel ciclo attuale i+1 (con n= 2^(i+1), (alla partenza si assegna 0 alla variabile areaold, i cicli di cui si parla sono quelli della struttura ripetitiva do-until)
con un ciclo for calcoliamo la somma di tutti i trapezi in cui e' stata divisa l'area sottesa alla funzione da integrare, per calcolare le basi di ciascun trapezio si deve calcolare il valore che la funzione assume in 2 punti che
- nel primo trapezio sono i punti a e
- nel secondo trapezio sono i punti e
- ... ne
- nel trapezio k sono i punti e
per calcolare il valore della funzione si richiama la funzione funzdaintegrare passando il valore del punto ( che viene associato nella variabile x ) e ottenendo il corrispondente valore y
il ciclo del do-while che serve per trovare il valore di n adatto a garantire la tolleranza richiesta si ferma quando
tolleranza>abs(area-areaold)
l'istruzione printf("messaggio",var1,var2 ... varn) serve per visualizzare la scritta fra " ", alcuni simboli del messaggio come %i %f vengono sostituiti con i valori del elenco di variabili scritto dopo rispettandone l'ordine,
- se scrivo %i mi aspetto che la corrispondente variabile sia intera
- se scrivo %f mi aspetto che la corrispondente variabile sia un numero floatpoint cioe' un numero con la virgola (reale)
altri simboli inseriti nel messaggio come \n hanno significati particolari, /n significa vai a capo (spostati nella riga successiva)
per controllare che il tutto funzioni usiamo il comando quad (che sta per quadratura ) per il calcolo dell'integrale definito (per capire come funziona ricercate il comando quad nel help di octave, basta scrivere nella console comandi help quad )