Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 1
Definizione del problema: Si vuole trovare il valore della ascissa per cui una funzione monotona assume valore zero in un determinato intervallo e con una approssimazione fissata
Definizione della specifica del programma:
I: a, b reali estremi dell’intervallo; funzione da valutare; eps, reale, approssimazione richiesta
Pi: b>a; eps>0; f(a) * f(b)<0
U: il valore della ascissa per cui si ha il punto di nullo per la funzione
Pu: nessuna
Ricerca dello zero di una funzione in un intervallo definito
Ricerca dello zero di una funzione in un intervallo definito
a
h b h
x
mx
m=(b+a)/2
Si verifica se in xm si ha lo zero ... metodo di bisezione ...
Ai due estremi (a,b) la funzione deve assummere valori di segno opposto
a x
mb
x
’mSe in xm il valore della funzione è maggiore di zero la ricerca continua nel semintervallo (a, xm), poi in (x’m, xm) e così via fin quando si è trovato il punto di nullo o l’intervallo si è dimezzatto ad una ampiezza pari o inferiore a quella della approssimazione fissata
Se in xm il valore della funzione è minore di zero
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 3
Descrizione del metodo di elaborazione:
• Si richiede in input l’immissione degli estremi dell’intervallo e la approssimazione;
• viene valutato il valore della funzione nel punto medio dell’intervallo (a,b): se in esso la funzione ha un nullo il procedimento termina altrimenti continua dimezzando l’intervallo e continuando la ricerca nel semintervallo per cui il valore della funzione nel punto medio di questo ha valore di segno opposto a quello di uno degli estremi.
• Il procedimento continua fino a quando è trovato il punto di nullo (con la
approssimazione indicata) o l’ampiezza dell’intervallo è inferiore o uguale a quella dell’approssimazione indicata.
• Si utilizzeranno due sottoprogrammi di tipo funzione:
• Uno per definire la funzione di cui valutare il punto di zero
• L’altro implementante l’algoritmo che cerca il punto di zero dimezzando di volta in volta l’intervallo in cui è effettuata la ricerca
Ricerca dello zero di una funzione in un intervallo definito
Ricerca dello zero di una funzione in un intervallo definito
y= 3*x-7 Funzione per
cui trovare il punto di zero
Y = 0 X = 2, 3333
X Y
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 5
Ricerca dello zero di una funzione in un intervallo definito
y= 3*x-7 Funzione per
cui trovare il punto di zero
Y = 0 X = 2, 3333
X
Y float fnz(float x)
{float y;
y= 3*x-7 return y;
}
Sottoprogramma C di tipo function, descrivente la funzione per cui trovare il punto di zero
#include <stdio.h>
#include <math.h>
float fnz(float x) ;
float zerofun (float a, float b, float ep);
main ()
{float estinf, estsup, eps;
do
{ printf("Immetti estremo inferiore intervallo \n");
scanf("%f",&estinf);
printf("Immetti estremo superiore intervallo \n");
scanf("%f", &estsup);
if ((fnz(estinf) * fnz(estsup))>0) printf ("estremi non validi \n");
} while ((estinf>=estsup) || (fnz(estinf) * fnz(estsup))>0);
do
{printf(" Immetti precisione \n");
scanf("%f", &eps);
} while (eps<=0);
printf(" ESTINF= %f ESTSUP= %f precisione= %f \n",estinf, estsup, eps);
printf ("Lo zero si trova nel punto x= %f \n", zerofun(estinf,estsup, eps));
Ricerca dello zero di una funzione
in un intervallo definito
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 7
Ricerca dello zero di una funzione in un intervallo definito float fnz(float x)
{float y;
y= 3*x-7 return y;
}
Funzione per cui trovare il punto di zero
float zerofun (float a, float b, float ep) { float x1, x2, xm, finf, fmed;
finf=fnz(a);
x1=a; x2=b;
do
{ xm=(x1+x2)/2;
fmed=fnz(xm);
if (finf*fmed<0) x2=xm;
else { x1=xm;
finf=fmed;}
}while (fabs(x2-x1)>=ep);
printf(“Y = %f EPS = %f \n”, fmed, ep);
return ((x1+x2)/2);
}
Funzione implementante l’algoritmo che cerca il punto di zero dimezzando l’intervallo di ricerca
Definizione del problema:
Si vuole effettuare il calcolo dell’integrale definitoa
∫
bf(x) dx
utilizzando la formula di quadratura di EuleroDefinizione della specifica del programma:
I: a, b reali estremi dell’intervallo di integrazione; dx, reale, passo di integrazione;
funzione da integrare Pi: b>a; dx>0
U: il valore dell’integrale
Pu: se le Pi non sono verificate il valore dell’integrale è indefinito
Descrizione del metodo di elaborazione:
Si richiede in input l’immissione degli estremi di integrazione e del passo di integrazione; si effettua il calcolo dell’integrale secondo il metodo di quadratura di Eulero:Calcolo di integrale definito con il metodo di Eulero
dx b
a x
dx x
f( )
dx b
a x
x f( )
S= = dx
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 9
funzione da integrare y = 3*x;
nell’intervallo (0, 3)
X Y
#include <stdio.h>
float funzione(float x);
float eulero (float a, float b, float dx);
main ()
{float estinf, estsup, passo;
do
{ printf("Immetti estremo inferiore di integrazione \n");
scanf("%f", &estinf);
printf("Immetti estremo superiore di integrazione \n");
scanf("%f", &estsup);
} while ((estinf>=estsup);
do
{ printf("Immetti passo di integrazione \n");
scanf("%f", &passo);
} while ((passo<=0);
Calcolo di integrale definito con il metodo di Eulero:
il programma C
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 11
Calcolo di integrale definito con il metodo di Eulero:
il programma C
float eulero (float a, float b, float dx) {
float x, S;
S=0;
for(x=a;(x<=b);(x=x+dx)) S=S+funzione(x);
S=S*dx;
return S;
} // funzione da integrare
float funzione(float x) {float y = 3*x;
return y;
}
funzione da integrare in (0,3) // funzione da integrare
float funzione(float x) {float y = 3*x;
return y;
}
X Y
0