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 monotona in un intervallo definito
Ricerca dello zero di una funzione monotona 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 monotona in un intervallo definito
Ricerca dello zero di una funzione monotona 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 monotona 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");
Ricerca dello zero di una funzione
monotona in un intervallo definito
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 7
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));
printf("FINE \n");
}
Ricerca dello zero di una funzione monotona in un intervallo definito
Ricerca dello zero di una funzione monotona in un
intervallo definito
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; // punto medio in (x1, x2) fmed=fnz(xm); // valore fnz in punto medio 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
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 9
float fnz(float x) {float y;
y= 3*x-7 return y;
}
Funzione per cui trovare il punto di zero
Ricerca dello zero di una funzione monotona in un
intervallo definito
Y = 0 X = 2, 3333
X Y
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 bdx
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 11
funzione da integrare y = 3*x;
nell’intervallo (0, 3)
X Y
A = (3 * 9)/2 =13,5
0
∫
33x dx = 13,5dx = 0,5
A = 0,5 *(0 + 1,5 + 3 +4,5 + 6 + 7,5 + 9) = 0,5 *15,75
#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);
printf("Integrale definito tra %f e %f = %f \n", estinf, estsup, eulero(estinf, estsup, passo));
}
Calcolo di integrale definito con il metodo di Eulero:
il programma C
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 13
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