lezione
lezione
Area (superiori)
Tipo di risorsa Tipo: lezione
Materia di appartenenza Materia: Informatica (istituti tecnici) per le superiori
Avanzamento Avanzamento: lezione completa al 00%

Calcolo di un integrale finito

modifica

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 )